/
vortex/area/
#if defined(macintosh)
#include<types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"

char* get_status_name( CHAR_DATA *ch)
{
  if( IS_NPC(ch))
   return NULL;
  if( ch->level == LEVEL_IMPLEMENTOR)
   return config_info->imm12;
  if( ch->level == LEVEL_HIGHJUDGE)
   return config_info->imm11;
  if( ch->level == LEVEL_JUDGE)
   return config_info->imm10;
  if( ch->level == LEVEL_ENFORCER)
   return config_info->imm09;
  if( ch->level == LEVEL_QUESTMAKER)
   return config_info->imm08;
  if( ch->level == LEVEL_BUILDER)
   return config_info->imm07;
  if( (ch->level < LEVEL_BUILDER) && (ch->level > 2))
  {
   if( ch->race == 0)
    return config_info->title_none;
   if( (ch->race >= 1) && (ch->race < 5))
    return config_info->title00;
   if( (ch->race >= 5) && (ch->race < 10))
    return config_info->title05;
   if( (ch->race >= 10) && (ch->race < 15))
    return config_info->title10;
   if( (ch->race >= 15) && (ch->race < 20))
    return config_info->title15;
   if( (ch->race >= 20) && (ch->race < 25))
    return config_info->title20;
   if( (ch->race >= 25) && (ch->race < 30))
    return config_info->title25;
   if( (ch->race >= 30) && (ch->race < 35))
    return config_info->title30;
   if( (ch->race >= 35) && (ch->race < 40))
    return config_info->title35;
   if( ch->race >= 40)
    return config_info->title40;
  }
  return "Mortal";
}

char* get_class_name( CHAR_DATA *ch)
{
  switch( ch->class)
  {
   case CLASS_NONE:
    return "None"; break;
   case CLASS_APOCRYPHIC:
    return "Apocryphic"; break;
   case CLASS_ALIEN:
    return "Alien"; break;
   case CLASS_CYBORG:
    return "Cyborg"; break;
   case CLASS_MONK:
    return "Monk"; break;
   case CLASS_SHADOW:
    return "Shadow"; break;
   case CLASS_WOLF:
    return "Werewolf"; break;
   case CLASS_JEDI:
    return "Jedi"; break;
   case CLASS_VAMPIRE:
    return "Vampire"; break;
   case CLASS_DRAGON:
    return "Dragon"; break;
   default:
    return "Unkown"; break;
  }
  return "BUG";
}

char* get_class_rank( CHAR_DATA *ch)
{
  if( ch->class == CLASS_MONK)
  {
   switch(GET_POWERS(ch, MONK_CLASS))
   {
    default:
     return "None"; break;
    case PATH_INFERNO:
     return "Inferno"; break;
    case PATH_PEARL:
     return "Pearl"; break;
    case PATH_TSUNAMI:
     return "Tsunami"; break;
    case PATH_GAIA:
     return "Gaia"; break;
    case PATH_TEMPEST:
     return "Tempest"; break;
   }
  }
  if( ch->class == CLASS_ALIEN)
  {
   switch( GET_POWERS(ch, ALIEN_CLASS))
   {
    default:
     return "Drone"; break;
    case ALIEN_RUN:
     return "Runner"; break;
    case ALIEN_WAR:
     return "Warrior"; break;
    case ALIEN_PRAE:
     return "Praetorian"; break;
    case ALIEN_SCORP:
     return "Scorpion"; break;
    case ALIEN_GOR:
     return "Gorilla"; break;
   }
  }
  return "None";
}

char* get_player_name( CHAR_DATA *ch)
{
 if( IS_NPC(ch))
  return ch->name;
 else
  return ch->pcdata->switchname;
}

char* get_title( CHAR_DATA *ch)
{
 if( !IS_NPC(ch))
  return ch->pcdata->title;
 else
  return "None";
}

char* get_clan_rank( CHAR_DATA *ch)
{
  CLAN_DATA *clan;

  if( (clan = find_clan_name(ch->clan)) == NULL)
   return "None";
  else
   return clan->rank_name[ch->clan_rank];
}

char* act_who( CHAR_DATA *ch, const char *format)
{
 char *fill_string;
 char ret_val[MAX_STRING_LENGTH];
 char word[MAX_STRING_LENGTH];
 char buf[MAX_STRING_LENGTH];

 if( format[0] == '\0'
  || format == NULL)
  return "\n\r";

 fill_string = strdup(format);
 buf[0] = '\0';
 ret_val[0] = '\0';

 while( fill_string[0] != '\0')
 {
  fill_string = one_argument(fill_string, word);
  if( word[0] != '$')
  {
   sprintf( buf, "%s ", word);
   buf[0] = UPPER(buf[0]);
   strcat(ret_val, buf);
   continue;
  }
  else
  {
   switch( word[1])
   {
   case '1':
    sprintf( buf, "%-10s ", get_player_name(ch)); break;
   case '2':
    sprintf( buf, "%-10s ", get_class_name(ch));  break;
   case '3':
    sprintf( buf, "%-8s ", ch->clan);            break;
   case '4':
    sprintf( buf, "%-12s ", get_status_name(ch)); break;
   case '5':
    sprintf( buf, "%-8s ", get_class_rank(ch));  break;
   case '6': 
    sprintf( buf, "%-12s ", get_clan_rank(ch));   break;
   case '7': 
    sprintf( buf, "%-20s ", get_title(ch));       break;
   case '8': 
    sprintf( buf, "%2d ", ch->race);           break;
   case '9': 
    sprintf( buf, "%2d ", ch->generation);     break;
   case '0':
    sprintf( buf, "%2d ", ch->pcdata->souls);  break;
   default:
    sprintf( buf, "NULL ");                    break;
   }
   strcat(ret_val, buf);
  } 
 }
 strcat(ret_val, "\n\r"); 
 ret_val[0] = UPPER(ret_val[0]);
 return str_dup(ret_val);
}

void do_new_who( CHAR_DATA *ch, char *argument)
{
 BUFFER *mortal    = buffer_new( MAX_STRING_LENGTH);
 BUFFER *titlenone = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title00   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title05   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title10   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title15   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title20   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title25   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title30   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title35   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *title40   = buffer_new( MAX_STRING_LENGTH);
 BUFFER *imm07     = buffer_new( MAX_STRING_LENGTH);
 BUFFER *imm08     = buffer_new( MAX_STRING_LENGTH); 
 BUFFER *imm09     = buffer_new( MAX_STRING_LENGTH); 
 BUFFER *imm10     = buffer_new( MAX_STRING_LENGTH); 
 BUFFER *imm11     = buffer_new( MAX_STRING_LENGTH); 
 BUFFER *imm12     = buffer_new( MAX_STRING_LENGTH);
 DESCRIPTOR_DATA *d;
 bool avafound = FALSE;
 bool immfound = FALSE;
 bool morfound = FALSE;
 char buf[MAX_STRING_LENGTH];
 int exp = 0;

 buffer_clear( mortal);
 buffer_clear( titlenone);
 buffer_clear( title00);
 buffer_clear( title05);
 buffer_clear( title10);
 buffer_clear( title15);
 buffer_clear( title20);
 buffer_clear( title25);
 buffer_clear( title30);
 buffer_clear( title35);
 buffer_clear( title40);
 buffer_clear( imm07  );
 buffer_clear( imm08  );
 buffer_clear( imm09  );
 buffer_clear( imm10  );
 buffer_clear( imm11  );
 buffer_clear( imm12  );

 if( IS_NPC(ch))
  return;
 if( ch->pcdata->who == NULL
  || ch->pcdata->who[0] == '\0'
  || strlen(ch->pcdata->who) < 1)
 {
  stc("Resetting your who to default.\n\r", ch);
  ch->pcdata->who = strdup( "");
  return;
 }
 for( d = descriptor_list; d; d = d->next)
 {
  if( d->connected != CON_PLAYING)
   continue;
  if( !can_see(ch, d->character))
   continue;
  if( IS_NPC(d->character))
   continue;
  if( d->character->level == LEVEL_IMPLEMENTOR)
  {
   bprintf( imm12, act_who( d->character, ch->pcdata->who));
   immfound = TRUE;
  }
  else if( d->character->level == LEVEL_HIGHJUDGE)
  {
   bprintf( imm11, act_who( d->character, ch->pcdata->who));
   immfound = TRUE;
  }
  else if( d->character->level == LEVEL_JUDGE)
  {
   bprintf( imm10, act_who( d->character, ch->pcdata->who));
   immfound = TRUE;
  }
  else if( d->character->level == LEVEL_ENFORCER)
  {
   bprintf( imm09, act_who( d->character, ch->pcdata->who));
   immfound = TRUE;
  }
  else if( d->character->level == LEVEL_QUESTMAKER)
  {
   bprintf( imm08, act_who( d->character, ch->pcdata->who));
   immfound = TRUE;
  }
  else if( d->character->level == LEVEL_BUILDER)
  {
   bprintf( imm07, act_who( d->character, ch->pcdata->who));
   immfound = TRUE;
  }
  else if( (d->character->level < 7) && (d->character->level > 2))
  {
    avafound = TRUE;
    if( d->character->race >= 40)
     bprintf( title40, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 40) && (d->character->race >= 35))
     bprintf( title35, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 35) && (d->character->race >= 30))
     bprintf( title30, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 30) && (d->character->race >= 25))
     bprintf( title25, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 25) && (d->character->race >= 20))
     bprintf( title20, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 20) && (d->character->race >= 15))
     bprintf( title15, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 15) && (d->character->race >= 10))
     bprintf( title10, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 10) && (d->character->race >= 5))
     bprintf( title05, act_who(d->character, ch->pcdata->who));
    else if( (d->character->race < 5) && (d->character->race >= 1))
     bprintf( title00, act_who(d->character, ch->pcdata->who));
    else
     bprintf( titlenone, act_who( d->character, ch->pcdata->who));
  }
  else
  {
   bprintf( mortal, act_who( d->character, ch->pcdata->who));
   morfound = TRUE;
  }
 }
 if( immfound)
 {
 stc("|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- IMMORTALS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n\r",ch);
 if( imm12->data[0] != '\0');
  stc( imm12->data, ch);
 if( imm11->data[0] != '\0');
  stc( imm11->data, ch);
 if( imm10->data[0] != '\0');
  stc( imm10->data, ch);
 if( imm09->data[0] != '\0');
  stc( imm09->data, ch);
 if( imm08->data[0] != '\0');
  stc( imm08->data, ch);
 if( imm07->data[0] != '\0');
  stc( imm07->data, ch);
 stc("\n\r", ch);
 }
 if( avafound)
 {
  stc("|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- AVATARS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n\r", ch);
 if( title40->data[0] != '\0');
  stc( title40->data, ch);
 if( title35->data[0] != '\0');
  stc( title35->data, ch);
 if( title30->data[0] != '\0');
  stc( title30->data, ch);
 if( title25->data[0] != '\0');
  stc( title25->data, ch);
 if( title20->data[0] != '\0');
  stc( title20->data, ch);
 if( title15->data[0] != '\0');
  stc( title15->data, ch);
 if( title10->data[0] != '\0');
  stc( title10->data, ch);
 if( title05->data[0] != '\0');
  stc( title05->data, ch);
 if( title00->data[0] != '\0');
  stc( title00->data, ch);
 if( titlenone->data[0] != '\0');
  stc( titlenone->data, ch);
 stc("\n\r", ch);
 }
 if( morfound)
 {
  stc("|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-  MORTALS  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n\r", 
ch);
  if( mortal->data[0] != '\0')
   stc(mortal->data, ch);
 }
 exp += (int) ((exp_who - 1) * 100);
 exp += ((global_exp_mult - 1) * 100);
 stc("|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- STATISTICS =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n\r", 
ch);
 sprintf( buf,
     "|           New players this reboot: %3d         Old players this reboot: %3d           |\n\r",
      new_players, old_players);
 stc( buf, ch);
 sprintf( buf, 
     "|                           Experience Bonus [%3d]                                      |\n\r", 
exp);
 stc( buf, ch);
 if( deathmatch)
  stc("|                            Deathmatch Mode: On                                        |\n\r", 
ch);
 else
  stc("|                            Deathmatch Mode: Off                                       |\n\r", 
ch);
 stc("|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|\n\r", 
ch);
 buffer_free( imm12);
 buffer_free( imm11);
 buffer_free( imm10);
 buffer_free( imm09);
 buffer_free( imm08);
 buffer_free( imm07);
 buffer_free( title40);
 buffer_free( title35);
 buffer_free( title30);
 buffer_free( title25);
 buffer_free( title20);
 buffer_free( title15);
 buffer_free( title10);
 buffer_free( title05);
 buffer_free( title00);
 buffer_free( titlenone);
 buffer_free( mortal);
 return;
}

void do_setwho(CHAR_DATA *ch, char *argument)
{
 char buf[MAX_STRING_LENGTH];

 if( IS_NPC(ch))
  return;
 one_argument( argument, buf);
 if( !str_cmp(buf, "off"))
 {
  ch->pcdata->who = strdup( "" );
  return;
 }
 stc("Your new who display will look like this:\n\r", ch);
 stc( act_who(ch, argument), ch);
 smash_tilde(argument);
 free_string( ch->pcdata->who);
 ch->pcdata->who = str_dup( argument);
 return;
}