area/
src/
#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_legendwho( CHAR_DATA *ch, char *argument)
{
DESCRIPTOR_DATA *d;
CHAR_DATA *gch;
char const *legend;
char buf[MAX_STRING_LENGTH];

send_to_char("Name                    Mightrate      Legend\n\r",ch); 

for (d = descriptor_list; d!= NULL; d= d->next)
{
    if (d->connected != CON_PLAYING) continue;
    if ((gch = d->character) == NULL) continue;
    if (IS_IMMORTAL(gch)) continue;

	if (gch->pcdata->legend == 20) legend = "#0Godlike#n";
        else if (gch->pcdata->legend == 19)legend = "#7Almighty#n";
        else if (gch->pcdata->legend == 18)legend = "#cSupreme#n";
        else if (gch->pcdata->legend == 17)legend = "#RMaster#n";
        else if (gch->pcdata->legend == 16)legend = "#rChampion#n";
        else if (gch->pcdata->legend == 15)legend = "#LCavalier#n";
        else if (gch->pcdata->legend == 14)legend = "#CGrand Duke#n";
        else if (gch->pcdata->legend == 13)legend = "#GLord#n";
        else if (gch->pcdata->legend == 12)legend = "#gSovereign#n";
        else if (gch->pcdata->legend == 11)legend = "#LEmperor#n";
        else if (gch->pcdata->legend == 10)legend = "#lKing#n";
        else if (gch->pcdata->legend == 9)legend = "#CDuke#n";
        else if (gch->pcdata->legend == 8)legend = "#oLegend#n";
        else if (gch->pcdata->legend == 7)legend = "#PMystical#n";
        else if (gch->pcdata->legend == 6)legend = "#pMyth#n";
        else if (gch->pcdata->legend == 5)legend = "#CHero#n";
        else if (gch->pcdata->legend == 4)legend = "#LKnight#n";
        else if (gch->pcdata->legend == 3)legend = "#RSavior#n";
        else if (gch->pcdata->legend == 2)legend = "#rCitizen#n";
        else if (gch->pcdata->legend == 1)legend = "#GSerf#n";
        else legend = "#RNone#n";

sprintf(buf,"#R%-24s #y%-6d        #L%s#n\n\r",gch->pcdata->switchname,getMight(gch),legend);
send_to_char(buf,ch);

}
}

void load_best()
{

  int i;   
  FILE *fp;

  if ((fp = fopen("../txt/best.txt", "r")) == NULL)
  {
    log_string("Error: best.txt not found!");
    exit(1);
  }
  best[0].name = " ";
  best[0].status = 0;
  best[0].pkscore = 0;
  for (i = 0; i < 21; i++)
  {
    best[i].name = fread_string(fp);
    best[i].status = fread_number(fp);
    best[i].pkscore = fread_number(fp);
  }
  fclose(fp);

}
void save_best()
{

  FILE *fp;
  int i;

  if ((fp = fopen("../txt/best.txt","w")) == NULL)
  {
    log_string("Error writing to best.txt");
    return;
  }
  for (i=0;i<41;i++)
  {
    fprintf(fp, "%s~\n", best[i].name); 
    fprintf(fp, "%d\n", best[i].status);
    fprintf(fp, "%d\n", best[i].pkscore);
  }
  fclose (fp);

}

void update_best( CHAR_DATA *ch )
{
  int j;
  char buf[MAX_STRING_LENGTH];
  char class[MAX_STRING_LENGTH];
  bool changed = FALSE;

  if (IS_NPC(ch)) return;
  if (ch->level > 6) return;
  if (ch->level < 3) return;
  if (ch->class == 0) return;

       if (ch->class == CLASS_DEMON)        {j=0;  sprintf(class,"Demon");}
  else if (ch->class == CLASS_WEREWOLF)     {j=1;  sprintf(class,"Werewolf");}
  else if (ch->class == CLASS_VAMPIRE)      {j=3;  sprintf(class,"Vampire");}
  else if (ch->class == CLASS_DROW)         {j=2;  sprintf(class,"Drow");}
  else if (ch->class == CLASS_TANARRI)      {j=4;  sprintf(class,"Tanarri");}
  else if (ch->class == CLASS_ANGEL)        {j=5;  sprintf(class,"Angel");}
  else if (ch->class == CLASS_UNDEAD_KNIGHT){j=6;  sprintf(class,"Undead Knight");}
  else if (ch->class == CLASS_ASSASSIN)     {j=7;  sprintf(class,"Assassin");}
  else if (ch->class == CLASS_WRAITH)       {j=8;  sprintf(class,"Wraith");}
  else if (ch->class == CLASS_ELEMENTAL)    {j=9;  sprintf(class,"Elemental");}
  else if (ch->class == CLASS_PALADIN)      {j=10; sprintf(class,"Paladin");}
  else if (ch->class == CLASS_SORCERER)     {j=11; sprintf(class,"Sorcerer");}
  else if (ch->class == CLASS_WIZARD)       {j=12; sprintf(class,"War Wizard");}
  else if (ch->class == CLASS_HYDRA)        {j=13; sprintf(class,"Hydra");}
  else if (ch->class == CLASS_FAERIE)       {j=14; sprintf(class,"Faerie");}
  else if (ch->class == CLASS_BLADE_MASTER) {j=15; sprintf(class,"Blade Master");}
  else if (ch->class == CLASS_DRAGON)       {j=16; sprintf(class,"Dragon");}
  else if (ch->class == CLASS_ANTIPALADIN)     {j=17; sprintf(class,"Anti-Paladin");}
  else if (ch->class == CLASS_ZOMBIE)       {j=18; sprintf(class,"Zombie");}
  else if (ch->class == CLASS_SHINOBI)      {j=19; sprintf(class,"Shinobi");}
  else if (ch->class == CLASS_HUMAN)        {j=20; sprintf(class,"TechnoMage");}


  else
  {
    sprintf(buf,"update_best: %s has bad class %d",ch->name,ch->class);
    log_string(buf);
    return;
  }

  if (ch->pStatus == best[j].status)
  {
    if (!str_cmp(ch->name,best[j].name) && getMight(ch) != best[j].pkscore)
    {
      best[j].pkscore = getMight(ch);
      changed = TRUE;
    }
    if (str_cmp(ch->name,best[j].name) && ch->pStatus >= best[j].status && getMight(ch) > best[j].pkscore)
    {
      if (str_cmp(best[j].name,"None"))
        sprintf(buf,"#L%s#0 has taken the ranking of strongest #G%s#0 from #L%s#n.",
	  ch->pcdata->switchname,class,best[j].name);
      else
        sprintf(buf,"#L%s#0 has taken the ranking of strongest #G%s#n.",
	  ch->pcdata->switchname,class);
      do_info(ch,buf);
  
      best[j].status = ch->pStatus;
      free_string(best[j].name);
      best[j].name = str_dup(ch->name);
      best[j].pkscore = getMight(ch);  
      changed = TRUE;
    }
  }
  if (ch->pStatus != best[j].status) 
  {
    if (!str_cmp(ch->name,best[j].name) && ch->pStatus != best[j].status) 
    {
      free_string(best[j].name);
      best[j].pkscore = getMight(ch);
      changed = TRUE;
    }
    else if (str_cmp(ch->name,best[j].name) && ch->pStatus > best[j].status)
    {
      if (str_cmp(best[j].name,"None"))
        sprintf(buf,"#L%s#0 has taken the ranking of strongest #G%s#0 from #L%s#n.",
	  ch->pcdata->switchname,class,best[j].name);
      else
        sprintf(buf,"#L%s#0 has taken the ranking of strongest #G%s#n.",
	  ch->pcdata->switchname,class);
      do_info(ch,buf);

      best[j].status = ch->pStatus;
      free_string(best[j].name);
      best[j].name = str_dup(ch->name);
      best[j].pkscore = getMight(ch);
      changed = TRUE;
    }
  }  
  if (changed) save_best();
  return;
}

void do_topstatus(CHAR_DATA *ch, char *argument)
{
int i;
char buf[MAX_STRING_LENGTH];
char class[MAX_STRING_LENGTH];
send_to_char("#CClass#0                    : #GName         #0->   #RStatus    #yMightrate#n\n\r",ch);
send_to_char("\n\r",ch);
for (i=0;i<21;i++)
{

if (i==0) sprintf(class,"#R[#0Demon#R]#n                 ");
if (i==1) sprintf(class,"#y((#LWerewolf#y))#n            ");
if (i==3) sprintf(class,"#0<<#RVampire#0>>#n             ");
if (i==2) sprintf(class,"#P.o0#0Drow#P0o.#n              ");
if (i==4) sprintf(class,"#y{#RTanar'ri#y}#n              ");
if (i==5) sprintf(class,"#y.x#0(#7Angel#0)#yx.#n             ");
if (i==6) sprintf(class,"#0|[#LUndead Knight#0]|#n       ");
if (i==7) sprintf(class,"#g[#rX#g]#oAssassin#g[#rX#g]#n          ");
if (i==8) sprintf(class,"#7(#0*#R=#r-#oWraith#r-#R=#0*#7)#n          ");
if (i==9) sprintf(class,"#Rx#rX#C[#gElemental#C]#rX#Rx#n         ");
if (i==10) sprintf(class,"#y<#7/#y+#7>#nPaladin#7<#y+#7\\#y>#n         ");
if (i==11) sprintf(class,"#0[#P*#0]#rSorcerer#0[#P*#0]#n          ");
if (i==12) sprintf(class,"#n{{#CWar Wizard#n}}           ");
if (i==13) sprintf(class,"#C***#yHydra#C***#n             ");
if (i==14) sprintf(class,"#p{#0-#p}#0Faerie#p{#0-#p}#n            ");
if (i==15) sprintf(class,"#c-=#RBlade#yMaster#c=-#n         ");
if (i==16) sprintf(class,"#r:=#CDragon#r=:#n              ");
if (i==17) sprintf(class,"#C[#c-#C=#r<<AntiPaladin>>#C=#c-#C]#n      ");
if (i==18) sprintf(class,"#0(#r*#7Zombie#r*#0)#n              ");
if (i==19) sprintf(class,"#l\#0|#l/-#7S#0hinob#7i#l-\#0|#l/#n           ");
if (i==20) sprintf(class,"#r+#y=#r+TechnoMage#r+#y=#r+#n        ");


sprintf(buf,"%-18s #0: #G%-12s #0->     #R%-2d        #y%-5d\n\r",class,best[i].name,best[i].status,best[i].pkscore); 
send_to_char(buf,ch);
}

}

void do_resettopstatus(CHAR_DATA *ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
int x,i;
argument = one_argument(argument, arg);

if (!str_cmp(arg,"all"))
{
for (i=0;i<21;i++)
{
best[i].status = 0;
best[i].pkscore = 0;
free_string(best[i].name);
best[i].name = str_dup("None");
}
return;
}


else if (!is_number(arg))
{
send_to_char("Please enter a number to which top line to reset\n\r",ch);
return;
}


if (is_number(arg))
{
x = atoi(arg);

best[x].status = 0;
best[x].pkscore = 0;
free_string(best[x].name);
best[x].name = str_dup("None");
return;
}
}