예제 #1
0
파일: player.c 프로젝트: Igdra/smaugfuss
/* 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;
}
예제 #2
0
/* 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;
}
예제 #3
0
파일: player.c 프로젝트: m241dan/swrproject
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;
}
예제 #4
0
파일: tables.c 프로젝트: m241dan/swrproject
/*
 * 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" );
}