cotn25/area/
cotn25/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 < 33; 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<33;i++) // was 41
  {
    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_HUMAN)        {j=11; sprintf(class,"Technomage");}
  else if (ch->class == CLASS_SHINOBI)      {j=12; sprintf(class,"Shinobi");}
  else if (ch->class == CLASS_HYDRA)        {j=13; sprintf(class,"Hydra");}
  else if (ch->class == CLASS_SKYBLADE)     {j=14; sprintf(class,"Skyblade");}
  else if (ch->class == CLASS_GIANT) {j=15; sprintf(class,"Giant");}
  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_BLADE_MASTER)  {j=19; sprintf(class,"Blade Master");}
  else if (ch->class == CLASS_PRIEST)        {j=20; sprintf(class,"Priest");}
  else if (ch->class == CLASS_UNDEAD_LYCAN) {j=21; sprintf(class, "Undead Lycan");}
  else if (ch->class == CLASS_HELLS_SOLDIER){j=22; sprintf(class, "Hells Soldier");}
  else if (ch->class == CLASS_GAIA_WOLF)    {j=23; sprintf(class, "Gaia Wolf");}
  else if (ch->class == CLASS_SHADOWBORN)   {j=24; sprintf(class, "Shadowborn");}
  else if (ch->class == CLASS_DRUID)        {j=25; sprintf(class, "Druid");}
  else if (ch->class == CLASS_SHADOW_DRAGON) {j=26; sprintf(class, "Shadow Dragon");}
  else if (ch->class == CLASS_SHADOW_FIEND)  {j=27; sprintf(class, "Shadow Fiend");}
  else if (ch->class == CLASS_STALKER)  {j=28; sprintf(class, "Stalker");}
  else if (ch->class == CLASS_HELL_SPAWN)  {j=29; sprintf(class, "Hell Spawn");}
  else if (ch->class == CLASS_BLACK_ASSASSIN)  {j=30; sprintf(class, "Black Assassin");}
  else if (ch->class == CLASS_VAMPIRIC_MIST)  {j=31; sprintf(class, "Vampiric Mist");}
  else if (ch->class == CLASS_GHOUL)  {j=32; sprintf(class,"Ghoul");}

  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->name,class,best[j].name);
      else
        sprintf(buf,"#L%s#0 has taken the ranking of strongest #G%s#n.",
	  ch->name,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->name,class,best[j].name);
      else
        sprintf(buf,"#L%s#0 has taken the ranking of strongest #G%s#n.",
	  ch->name,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);
save_best();

for (i=0;i<33;i++)
{

if (i==0) cprintf(class,"#R[#0Demon#R]#n                 ");
if (i==1) cprintf(class,"#y((#LWerewolf#y))#n            ");
if (i==3) cprintf(class,"#0<<#RVampire#0>>#n             ");
if (i==2) cprintf(class,"#P.o0#0Drow#P0o.#n              ");
if (i==4) cprintf(class,"#y{#RTanar'ri#y}#n              ");
if (i==5) cprintf(class,"#y.x#0(#7Angel#0)#yx.#n             ");
if (i==6) cprintf(class,"#0|[#LUndead Knight#0]|#n       ");
if (i==7) cprintf(class,"#g[#rX#g]#oAssassin#g[#rX#g]#n          ");
if (i==8) cprintf(class,"#7(#0*#R=#r-#oWraith#r-#R=#0*#7)#n          ");
if (i==9) cprintf(class,"#Rx#rX#C[#gElemental#C]#rX#Rx#n         ");
if (i==10) cprintf(class,"#y<#7/#y+#7>#nPaladin#7<#y+#7\\#y>#n         ");
if (i==11) cprintf(class,"#0[#P*#0]#rTechnomage#0[#P*#0]#n        ");
if (i==12) cprintf(class,"#l\#0|#l/-#7S#0hinob#7i#l-\#0|#l/#n           ");
if (i==13) cprintf(class,"#C***#yHydra#C***#n             ");
if (i==14) cprintf(class,"#L=#R*#w>#CSky#Wblade#w<#R*#L=#n          ");
if (i==15) cprintf(class,"#c<>#GG#gian#Gt#c<>#n               ");
if (i==16) cprintf(class,"#r:=#CDragon#r=:#n              ");
if (i==17) cprintf(class,"#r^-^#0Anti-Paladin#r^-^#n      ");
if (i==18) cprintf(class,"#0(#r*#7Zombie#r*#0)#n              ");
if (i==19) cprintf(class,"Blade Master            ");
if (i==20) cprintf(class,"#w]>#L*#wPriest#L*#w<[#n            ");
if (i==21) cprintf(class,"#r[#yUndead Lycan#r]#n          ");
if (i==22) cprintf(class,"#g[#rH#gell#rs S#goldie#rr#g]#n         ");
if (i==23) cprintf(class,"#C-=#y(#rx#gG#Gaia Wol#gf#rx#y)#C=-#n       ");
if (i==24) cprintf(class,"#g[#rS#chado#rw#cb#ro#cr#rn#g]#n            ");
if (i==25) cprintf(class,"#C-=#y(#rx#gDruid#rx#y)#C=-#n           ");
if (i==26) cprintf(class,"#g[#cS#lhado#cw #cD#lrago#cn#g]#n         ");
if (i==27) cprintf(class,"#g[#rS#chado#rw #rF#cien#rd#g]#n          ");
if (i==28) cprintf(class, "#r[#gS#rtalke#gr]#n		");
if (i==29) cprintf(class, "#g[#rH#gELL#rS S#gPAW#rN#g]#n           ");
if (i==30) cprintf(class, "#G{#g/*\#G}#CBlack Assassin#G{#g/*\#G}#n  ");
if (i==31) cprintf(class, "#g<<#rVampyric #oMist#g>>#n       ");
if (i==32) cprintf(class, "#GX#gx#G(#gGhoul#G)#gx#GX#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<33;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;
}
}