tfe-1.0/area/
tfe-1.0/files/
tfe-1.0/logs/
tfe-1.0/logs/immortal/
tfe-1.0/logs/mob/
tfe-1.0/logs/object/
tfe-1.0/logs/player/
tfe-1.0/logs/room/
tfe-1.0/notes/clans/
tfe-1.0/player/
tfe-1.0/prev/
tfe-1.0/prev/area/
tfe-1.0/prev/player/
tfe-1.0/prev/rooms/
tfe-1.0/rooms/
tfe-1.0/src-gc/
tfe-1.0/src-msvc/
tfe-1.0/src-unix/
tfe-1.0/www/
tfe-1.0/www/html/
#include "define.h"
#include "struct.h"


void   recruit_member        ( char_data *ch, char_data *member );
void   add_to_faction        ( char_data *ch, int faction );
void   remove_from_faction   ( char_data *ch, int faction );
char*  relation_string       ( int a, int b );


bool are_allied( char_data* c1, char_data* c2 )
{
  if( ( c1->shdata->race > RACE_LIZARD ) == 
    ( c2->shdata->race > RACE_LIZARD ) )
    return TRUE;

  return FALSE;
}


bool associate( char_data* c1, char_data* c2 )
{
  if( are_allied( c1, c2 ) )
    return TRUE;

  const char* race = race_table[ c2->shdata->race ].name;

  send( c1, "You would never associate with a%s %s.\r\n",
     isvowel( *race ) ? "n" : "", race );
      
  return FALSE;
}


/*
 *   MODIFY ROUTINE
 */


void modify_reputation( char_data*, char_data*, int )
{
  /*
  char             tmp  [ MAX_STRING_LENGTH ];
  pfile_data*    pfile;
  int         vic_clan  = victim->shdata->clan;
  int          ch_clan  = ch->shdata->clan;
  int              mod;
  int                i;
  
  if( is_set( &ch->in_room->room_flags, RFLAG_ARENA ) ) 
    return;
 
  if( ch->species != NULL || vic_clan < 2 || victim == ch )
    return;

  pfile = ch->pcdata->pfile;

  if( type == REP_STOLE_FROM ) {
    pfile->reputation[vic_clan-2] += IS_NPC( victim ) ? -100 : -200;
    send( ch, "Your reputation changes for stealing from %s.\r\n",
      victim->Seen_Name( ch ) ); 
    }

  if( type == REP_ATTACKED ) {
    pfile->reputation[vic_clan-2] += IS_NPC( victim ) ? -100 : -200; 
    send( ch, "Your reputation changes for attacking %s.\r\n",
      victim->Seen_Name( ch ) ); 
    }
  
  if( type == REP_KILLED ) {
    for( i = 2; i < MAX_ENTRY_CLAN; i++ ) {
      mod = ( victim->species == NULL ? -300 : -500 );
      if( i != vic_clan )
        mod /= 3;
      mod = mod*(clan_table[vic_clan].relation[i-2]-50)/100;
      pfile->reputation[i-2] += mod;
      }
    send( ch, "Your reputation changes for killing %s.\r\n",
      victim->Seen_Name( ch ) ); 
    }

  if( ch_clan >= 2 && ch_clan < MAX_ENTRY_CLAN
    && pfile->reputation[ch_clan-2] < 0 ) {
    send( ch, "%sYou are cast out of your clan!!%s\r\n",
      bold_v( ch ), normal( ch ) );  
    sprintf( tmp, "%s is cast out of the %s clan for fighting %s.",
      ch->descr->name, clan_table[ch_clan].name, victim->descr->name );
    info( tmp, LEVEL_BUILDER, tmp, IFLAG_CLANS, 1, ch );
    ch->shdata->clan = CLAN_NONE;
    }
    */
  return;
}


/*
 *   REPUTATION COMMAND
 */

 
index_data reputation_index [] =
{ 
  { "abhorred",  "",   -600 },
  { "despised",  "",   -400 },
  { "hated",     "",   -200 },
  { "wanted",    "",    -50 },
  { "suspect",   "",      0 },
  { "dubious",   "",     50 },
  { "accepted",  "",    200 },
  { "credible",  "",    400 },
  { "reputable", "",    600 },
  { "esteemed",  "",     -1 },
};


void do_reputation( char_data* ch, char* argument )
{
  player_data*     pc  = (player_data*) ch;
  char_data*   victim;
  int i;

  if( not_player( ch ) )
    return;

  if( ch->shdata->level >= LEVEL_APPRENTICE && *argument != '\0' ) {
    if( ( victim = one_character( ch, argument, "show reputation",
      ch->array, (thing_array*) &player_list ) ) == NULL )
      return;
    if( ( pc = player( victim ) ) == NULL ) {
      send( ch, "Reputation cannot act on npcs.\r\n" );
      return;
      }
    }

  page_underlined( ch, "Sacrifices\r\n" );
  page( ch, "%17s: %d\r\n", "Cp", pc->reputation.gold );
  page( ch, "%17s: %d\r\n", "Blood", pc->reputation.blood );
  page( ch, "%17s: %d\r\n", "Magic", pc->reputation.magic );
  page( ch, "\r\n" );

  page_underlined( ch, "Nation Grievances\r\n" );
  for( i = 1; i < MAX_ENTRY_NATION; i++ ) 
    page( ch, "%17s: %d\r\n", nation_table[i].name,
      pc->reputation.nation[i] );

  int total = 0;

  for( i = 0; i < MAX_ENTRY_ALIGNMENT; i++ ) 
   total += pc->reputation.alignment[i];

  if( total == 0 )
    return;

  page( ch, "\r\n" );
  page_underlined( ch, "Alignment Exp (%)\r\n" );

  for( i = 0; i < MAX_ENTRY_ALIGNMENT; i++ ) 
    page( ch, "%17s: %6.2f\r\n", alignment_table[i].name,
      (float) 100*pc->reputation.alignment[i]/total );
}


/*
 *   WANTED COMMAND
 */


void do_wanted( char_data*, char* )
{
  /*
  char   buf  [ MAX_STRING_LENGTH ];
  int   clan  = ch->shdata->clan;
  int  count;
  int      i; 
 
  if( is_confused_pet( ch ) )
    return;

  send( "Command is disabled.\r\n", ch );
  return;

  if( argument[0] != '\0' ) {
    for( clan = CLAN_IMMORTAL+1; clan < MAX_ENTRY_CLAN; clan++ ) 
      if( !strncasecmp( argument, clan_table[clan].name,
        strlen( argument ) ) )
        break;

    if( clan == MAX_ENTRY_CLAN ) {
      send( ch, "That clan is unknown.\r\n" );
      return;
      }
    }

  if( clan >= MAX_ENTRY_CLAN ) {
    send( ch, "Your clan does not have a wanted list.\r\n" );
    return;
    }

  count = 0;
  page_title( ch, "WANTED" );
  sprintf( buf, "%24sName%7sBounty  Kills\r\n", " ", " " );
  page( ch, buf );

  for( i = 0; i < max_pfile; i++ ) {
    if( pfile_list[i] != NULL && pfile_list[i]->reputation[clan] < 0 ) {
      sprintf( buf, "%24s%-10s  %-7d  %-5d\r\n", "", pfile_list[i]->name,
        -pfile_list[i]->reputation[clan], 0 );
      page( ch, buf );
      count++;
      }
    }

  if( count == 0 )
    page(
      "                        Wanted list is currently empty.\r\n", ch );
      */
  return;
}

/*
 *   RELATIONS COMMAND
 */


char* relation_string( int rel )
{
       if( rel > 90 )  return "+++";
  else if( rel > 75 )  return " ++";
  else if( rel > 55 )  return " + ";
  else if( rel > 45 )  return " = ";
  else if( rel > 35 )  return " - ";
  else if( rel > 15 )  return " --";
  else if( rel > -1 )  return "---";
                       return "???";
}


void do_relations( char_data* ch, char* )
{
  char   tmp  [ MAX_STRING_LENGTH ];
  int i, j;

  page_title( ch, "Nation vs Race" );

  page( ch, "\r\n%16s", "" );
  for( i = 0; i < MAX_PLYR_RACE; i++ )
    sprintf( tmp+i*4, "%s ", race_table[i].abbrev );
  strcat( tmp, "\r\n" );
  page( ch, tmp );

  for( i = 2; i < MAX_ENTRY_NATION; i++ ) {
    page( ch, "%11s%s  ", "", nation_table[i].abbrev );
    for( j = 0; j < MAX_PLYR_RACE; j++ ) 
      page( ch, "%3s%s", relation_string( nation_table[i].race[j] ),
        j != MAX_PLYR_RACE-1 ? " " : "\r\n" );
    }

  page( ch, "\r\n" );
  page_title( ch, "Nation vs Alignment" );

  page( ch, "\r\n%24s", "" );
  for( i = 0; i < MAX_ENTRY_ALIGNMENT; i++ )
    sprintf( tmp+i*4, "%s  ", alignment_table[i].abbrev );
  strcat( tmp, "\r\n" );
  page( ch, tmp );

  for( i = 2; i < MAX_ENTRY_NATION; i++ ) {
    page( ch, "%19s%s  ", "", nation_table[i].abbrev );
    for( j = 0; j < MAX_ENTRY_ALIGNMENT; j++ ) 
      page( ch, "%3s%s", relation_string( nation_table[i].alignment[j] ),
        j != MAX_ENTRY_ALIGNMENT-1 ? " " : "\r\n" );
    } 

  page( ch, "\r\n" );
  page_centered( ch, "[ See help relations for explanation of table ]" );
}