/* Affects-at-a-glance, Blodkai */ void do_affected( CHAR_DATA* ch, const char* argument) { char arg[MAX_INPUT_LENGTH]; AFFECT_DATA *paf; SKILLTYPE *skill; if( IS_NPC( ch ) ) return; set_char_color( AT_SCORE, ch ); argument = one_argument( argument, arg ); if( !str_cmp( arg, "by" ) ) { send_to_char_color( "\r\n&BImbued with:\r\n", ch ); ch_printf_color( ch, "&C%s\r\n", !xIS_EMPTY( ch->affected_by ) ? affect_bit_name( &ch->affected_by ) : "nothing" ); if( ch->level >= 20 ) { send_to_char( "\r\n", ch ); if( ch->resistant > 0 ) { send_to_char_color( "&BResistances: ", ch ); ch_printf_color( ch, "&C%s\r\n", flag_string( ch->resistant, ris_flags ) ); } if( ch->immune > 0 ) { send_to_char_color( "&BImmunities: ", ch ); ch_printf_color( ch, "&C%s\r\n", flag_string( ch->immune, ris_flags ) ); } if( ch->susceptible > 0 ) { send_to_char_color( "&BSuscepts: ", ch ); ch_printf_color( ch, "&C%s\r\n", flag_string( ch->susceptible, ris_flags ) ); } } return; } if( !ch->first_affect ) { send_to_char_color( "\r\n&CNo cantrip or skill affects you.\r\n", ch ); } else { send_to_char( "\r\n", ch ); for( paf = ch->first_affect; paf; paf = paf->next ) if( ( skill = get_skilltype( paf->type ) ) != NULL ) { set_char_color( AT_BLUE, ch ); send_to_char( "Affected: ", ch ); set_char_color( AT_SCORE, ch ); if( ch->level >= 20 || IS_PKILL( ch ) ) { if( paf->duration < 25 ) set_char_color( AT_WHITE, ch ); if( paf->duration < 6 ) set_char_color( AT_WHITE + AT_BLINK, ch ); ch_printf( ch, "(%5d) ", paf->duration ); } ch_printf( ch, "%-18s\r\n", skill->name ); } } return; }
/* Display class information -Thoric */ void do_showclass( CHAR_DATA *ch, char *argument ) { char arg1[MIL], arg2[MIL]; struct class_type *Class; int cl, low, hi, ct, i; set_pager_color( AT_PLAIN, ch ); argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if ( !VLD_STR( arg1 ) ) { do_classes( ch, ( char * ) "" ); send_to_char( "Syntax: showclass <class> [level range]\r\n", ch ); return; } if ( is_number( arg1 ) && ( cl = atoi( arg1 ) ) >= 0 && cl < MAX_CLASS ) Class = class_table[cl]; else { Class = NULL; for ( cl = 0; cl < MAX_CLASS && class_table[cl]; cl++ ) if ( !str_cmp( class_table[cl]->who_name, arg1 ) ) { Class = class_table[cl]; break; } } if ( !Class ) { send_to_char( "No such class.\r\n", ch ); return; } pager_printf( ch, "&wCLASS: &W%s\r\n&w", VLD_STR( Class->who_name ) ? Class->who_name : "(Not set)" ); pager_printf( ch, "&wFilename: &W%s\r\n&w", VLD_STR( Class->filename ) ? Class->filename : "(Not set)" ); pager_printf( ch, "&wPrime Attribute: &W%-14s\r\n", a_types[Class->attr_prime] ); pager_printf( ch, "&wSecond Attribute: &W%-14s\r\n", a_types[Class->attr_second] ); pager_printf( ch, "&wDeficient Attribute: &W%-14s\r\n", a_types[Class->attr_deficient] ); ct = 0; send_to_pager( "&wDisallowed Races:&W\r\n", ch ); for ( i = 0; i < MAX_RACE; i++ ) { if ( IS_SET( Class->race_restriction, 1 << i ) ) { ct++; pager_printf( ch, "%10s ", race_table[i]->race_name ); if ( ct % 6 == 0 ) send_to_pager( "\r\n", ch ); } } if ( ( ct % 6 != 0 ) || ( ct == 0 ) ) send_to_pager( "\r\n", ch ); ct = 0; send_to_pager( "&wAllowed Races:&W\r\n", ch ); for ( i = 0; i < MAX_RACE; i++ ) { if ( !IS_SET( Class->race_restriction, 1 << i ) ) { ct++; pager_printf( ch, "%10s ", race_table[i]->race_name ); if ( ct % 6 == 0 ) send_to_pager( "\r\n", ch ); } } // Added in combo restrictions by: Taon... /* if((ct % 6 != 0) || (ct == 0)) send_to_pager("\r\n", ch); ct = 0; send_to_pager("&wAllowed combos:&W\r\n", ch); for(i = 0; i < MAX_CLASS; i++) { ct++; if(!IS_SET(Class->combo_restriction, 1 << i)) { pager_printf(ch, "%10s ", class_table[i]->who_name); send_to_pager("\r\n", ch); } } if((ct % 6 != 0) || (ct == 0)) send_to_pager("\r\n", ch); ct = 0; send_to_pager("&wNot Allowed combos:&W\r\n", ch); for(i = 0; i < MAX_CLASS; i++) { ct++; if(IS_SET(Class->combo_restriction, 1 << i)) { pager_printf(ch, "%10s ", class_table[i]->who_name); send_to_pager("\r\n", ch); } } */ send_to_char( "\r\n", ch ); pager_printf( ch, "&wMax Skill Adept: &W%-3d &wThac0 : &W%-5d &wThac32: &W%d\r\n", Class->skill_adept, Class->thac0_00, Class->thac0_32 ); pager_printf( ch, "&wHp Min/Hp Max : &W%-2d/%-2d &wMana Min/Max: &W%-2d/%-2d &wExpBase: &W%d\r\n", Class->hp_min, Class->hp_max, Class->mana_min, Class->mana_max, Class->exp_base ); pager_printf( ch, "&W%s &wClass\r\n", Class->starting ? "Starting" : "Non-Starting" ); pager_printf( ch, "&wAffected by: &W%s\r\n", !xIS_EMPTY( Class->affected ) ? ext_flag_string( &Class->affected, a_flags ) : "Nothing" ); pager_printf( ch, "&wResistant to: &W%s\r\n", flag_string( Class->resist, ris_flags ) ); pager_printf( ch, "&wSusceptible to: &W%s\r\n", flag_string( Class->suscept, ris_flags ) ); pager_printf( ch, "&wCrafting Base: &W%d\r\n", Class->craft_base ); /* * These are no longer in use. -Taon if(Class->reclass1 > 0) pager_printf(ch, "%s ", * class_table[class->reclass1]->who_name); if(Class->reclass2 > 0) pager_printf(ch, * "%s ", class_table[class->reclass2]->who_name); if(Class->reclass3 > 0) * pager_printf(ch, "%s ", class_table[class->reclass3]->who_name); * send_to_pager("\r\n", ch); */ /* if(VLD_STR(arg2)) { int x, y, cnt; low = UMAX(0, atoi(arg2)); hi = URANGE(low, atoi(argument), MAX_LEVEL); for(x = low; x <= hi; x++) { set_pager_color(AT_LBLUE, ch); pager_printf(ch, "Male: %-30s Female: %s\r\n", title_table[cl][x][0], title_table[cl][x][1]); cnt = 0; set_pager_color(AT_BLUE, ch); for(y = gsn_first_spell; y < gsn_top_sn; y++) if(skill_table[y]->skill_level[cl] == x) { pager_printf(ch, " %-7s %-19s%3d ", skill_tname[skill_table[y]->type], skill_table[y]->name, skill_table[y]->skill_adept[cl]); if(++cnt % 2 == 0) send_to_pager("\r\n", ch); if(cnt % 2 != 0) send_to_pager("\r\n", ch); send_to_pager("\r\n", ch); } } } */ if ( arg2 && arg2[0] != '\0' ) { int x, y, cnt; low = UMAX( 0, atoi( arg2 ) ); hi = URANGE( low, atoi( argument ), MAX_LEVEL ); for ( x = low; x <= hi; x++ ) { pager_printf( ch, "&wMale: &W%-30s &wFemale: &W%s\r\n", title_table[cl][x][0], title_table[cl][x][1] ); cnt = 0; for ( y = gsn_first_spell; y < gsn_top_sn; y++ ) if ( skill_table[y]->skill_level[cl] == x ) { pager_printf( ch, " &[skill]%-7s %-19s%3d ", skill_tname[skill_table[y]->type], skill_table[y]->name, skill_table[y]->skill_adept[cl] ); if ( ++cnt % 2 == 0 ) send_to_pager( "\r\n", ch ); } if ( cnt % 2 != 0 ) send_to_pager( "\r\n", ch ); send_to_pager( "\r\n", ch ); } } return; }
void do_affected( CHAR_DATA * ch, const char *argument ) { char arg[MAX_INPUT_LENGTH]; AFFECT_DATA *paf; SKILLTYPE *skill; int x; if( IS_NPC( ch ) ) return; argument = one_argument( argument, arg ); if( !str_cmp( arg, "by" ) ) { set_char_color( AT_BLUE, ch ); send_to_char( "\r\nImbued with:\r\n", ch ); set_char_color( AT_SCORE, ch ); ch_printf( ch, "%s\r\n", affect_bit_name( &ch->affected_by ) ); if( ch->top_level >= 20 ) { send_to_char( "\r\n", ch ); if( ch->resistant > 0 ) { set_char_color( AT_BLUE, ch ); send_to_char( "Resistances: ", ch ); set_char_color( AT_SCORE, ch ); ch_printf( ch, "%s\r\n", flag_string( ch->resistant, ris_flags ) ); } if( ch->immune > 0 ) { set_char_color( AT_BLUE, ch ); send_to_char( "Immunities: ", ch ); set_char_color( AT_SCORE, ch ); ch_printf( ch, "%s\r\n", flag_string( ch->immune, ris_flags ) ); } if( ch->susceptible > 0 ) { set_char_color( AT_BLUE, ch ); send_to_char( "Suscepts: ", ch ); set_char_color( AT_SCORE, ch ); ch_printf( ch, "%s\r\n", flag_string( ch->susceptible, ris_flags ) ); } } return; } if( !ch->first_affect && xIS_EMPTY( ch->affected_by ) ) { set_char_color( AT_SCORE, ch ); send_to_char( "\r\nNo cantrip or skill affects you.\r\n", ch ); } else { send_to_char( "\r\n", ch ); for( paf = ch->first_affect; paf; paf = paf->next ) if( ( skill = get_skilltype( paf->type ) ) != NULL ) { set_char_color( AT_BLUE, ch ); send_to_char( "Affected: ", ch ); set_char_color( AT_SCORE, ch ); if( ch->top_level >= 20 ) { if( paf->duration < 25 ) set_char_color( AT_WHITE, ch ); if( paf->duration < 6 ) set_char_color( AT_WHITE + AT_BLINK, ch ); ch_printf( ch, "(%5d) ", paf->duration ); } ch_printf( ch, "%-18s\r\n", skill->name ); } send_to_char( "\r\nAFF_Flags:", ch ); for( x = 0; x < MAX_AFF; x++ ) if( xIS_SET( ch->affected_by, x ) ) ch_printf( ch, " %s,", a_flags[x] ); send_to_char( "\r\n", ch ); } return; }
/* * Write skill data to a file */ void fwrite_skill( FILE * fpout, SKILLTYPE * skill ) { FACTOR_DATA *factor; AFFECT_DATA *aff; STAT_BOOST *stat_boost; fprintf( fpout, "Name %s~\n", skill->name ); fprintf( fpout, "Type %s\n", skill_tname[skill->type] ); fprintf( fpout, "Flags %d\n", skill->flags ); if( skill->target ) fprintf( fpout, "Target %d\n", skill->target ); fprintf( fpout, "Style %d\n", skill->style ); if( skill->minimum_position ) fprintf( fpout, "Minpos %d\n", skill->minimum_position ); if( skill->saves ) fprintf( fpout, "Saves %d\n", skill->saves ); if( skill->slot ) fprintf( fpout, "Slot %d\n", skill->slot ); if( skill->min_hp ) fprintf( fpout, "HP %d\n", skill->min_hp ); if( skill->min_mana ) fprintf( fpout, "Mana %d\n", skill->min_mana ); if( skill->min_move ) fprintf( fpout, "Move %d\n", skill->min_move ); fprintf( fpout, "Cost %s\n", print_bitvector( &skill->cost ) ); if( skill->beats ) fprintf( fpout, "Rounds %d\n", skill->beats ); if( skill->charge ) fprintf( fpout, "Charge %f\n", skill->charge ); if( skill->guild != -1 ) fprintf( fpout, "Guild %d\n", skill->guild ); fprintf( fpout, "Dammsg %s~\n", skill->noun_damage ); if( skill->msg_off && skill->msg_off[0] != '\0' ) fprintf( fpout, "Wearoff %s~\n", skill->msg_off ); if( skill->hit_char && skill->hit_char[0] != '\0' ) fprintf( fpout, "Hitchar %s~\n", skill->hit_char ); if( skill->hit_vict && skill->hit_vict[0] != '\0' ) fprintf( fpout, "Hitvict %s~\n", skill->hit_vict ); if( skill->hit_room && skill->hit_room[0] != '\0' ) fprintf( fpout, "Hitroom %s~\n", skill->hit_room ); if( skill->miss_char && skill->miss_char[0] != '\0' ) fprintf( fpout, "Misschar %s~\n", skill->miss_char ); if( skill->miss_vict && skill->miss_vict[0] != '\0' ) fprintf( fpout, "Missvict %s~\n", skill->miss_vict ); if( skill->miss_room && skill->miss_room[0] != '\0' ) fprintf( fpout, "Missroom %s~\n", skill->miss_room ); if( skill->die_char && skill->die_char[0] != '\0' ) fprintf( fpout, "Diechar %s~\n", skill->die_char ); if( skill->die_vict && skill->die_vict[0] != '\0' ) fprintf( fpout, "Dievict %s~\n", skill->die_vict ); if( skill->die_room && skill->die_room[0] != '\0' ) fprintf( fpout, "Dieroom %s~\n", skill->die_room ); if( skill->imm_char && skill->imm_char[0] != '\0' ) fprintf( fpout, "Immchar %s~\n", skill->imm_char ); if( skill->imm_vict && skill->imm_vict[0] != '\0' ) fprintf( fpout, "Immvict %s~\n", skill->imm_vict ); if( skill->imm_room && skill->imm_room[0] != '\0' ) fprintf( fpout, "Immroom %s~\n", skill->imm_room ); if( skill->dice && skill->dice[0] != '\0' ) fprintf( fpout, "Dice %s~\n", skill->dice ); if( skill->value ) fprintf( fpout, "Value %d\n", skill->value ); if( skill->threat ) fprintf( fpout, "Threat %d\n", skill->threat ); if( skill->cooldown ) fprintf( fpout, "Cooldown %d\n", skill->cooldown ); if( skill->difficulty ) fprintf( fpout, "Difficulty %d\n", skill->difficulty ); if( skill->participants ) fprintf( fpout, "Participants %d\n", skill->participants ); if( skill->components && skill->components[0] != '\0' ) fprintf( fpout, "Components %s~\n", skill->components ); if( skill->teachers && skill->teachers[0] != '\0' ) fprintf( fpout, "Teachers %s~\n", skill->teachers ); for( aff = skill->first_affect; aff; aff = aff->next ) fwrite_fuss_affect( fpout, aff ); if( skill->alignment ) fprintf( fpout, "Alignment %d\n", skill->alignment ); fprintf( fpout, "DamageDetails %f\n", skill->base_roll_boost ); for( stat_boost = skill->first_statboost; stat_boost; stat_boost = stat_boost->next ) fprintf( fpout, "StatBoost %d %d %f\n", stat_boost->from_id, stat_boost->location, stat_boost->modifier ); if( !xIS_EMPTY( skill->damtype ) ) fprintf( fpout, "Damtype %s\n", print_bitvector( &skill->damtype ) ); if( skill->type != SKILL_HERB ) { fprintf( fpout, "Minlevel %d\n", skill->min_level ); } for( factor = skill->first_factor; factor; factor = factor->next ) fprintf( fpout, "FactorID %d\n", factor->id ); fprintf( fpout, "End\n\n" ); }