/
roa/
roa/lib/boards/
roa/lib/config/
roa/lib/edits/
roa/lib/help/
roa/lib/misc/
roa/lib/plrobjs/
roa/lib/quests/
roa/lib/socials/
roa/lib/www/
roa/lib/www/LEDSign/
roa/lib/www/LEDSign/fonts/
roa/lib/www/LEDSign/scripts/
roa/src/s_inc/
roa/src/sclient/
roa/src/sclient/binary/
roa/src/sclient/text/
roa/src/util/
// Realms of Aurealis Utility File
// Author: James Rhone		1/23/97
//                              9/17/97 - set quest_pts = 0
//                              1/18/98 - reorder PLR2 flags
//                              5/04/98 - unaffect everybody...

// check player file for out of range affections and eliminate them
// also update player passwords and re encrypt them

#include "structures.h"
#include "utils.h"

#define NUM_SPELLS 256

// depending on the defines below... this is whatll be done
// #define _QUESTFIX_     1
// #define _GOLDFIX_      1
// #define _PWORDCHANGE_  1
// #define _PLR2FLAGFIX_  1
#define _AFFFIX_   1

char *crypt(char * a, char *b);

int main(int argc, char **argv)
{
  struct char_file_u od;
  FILE *infp, *outfp;
  int n, j;
  int i;
 
  infp = fopen("../lib/misc/players", "rb");
  outfp = fopen("../lib/misc/players.new", "wb");
  if (infp == NULL || outfp == NULL)
  {
    fprintf(stderr, "Could not open files.\n");
    exit(1);
  }

  n = 0;
  while (!feof(infp))
  {
    if (fread(&od, sizeof(od), 1, infp) != 1)
      break;
	
#ifdef _AFFFIX_
    // do affect checks and corrections if necessary
    for (i = 0; i < MAX_AFFECT; i++)
    {
      if (od.affected[i].type > NUM_SPELLS)
      {
	printf("%s illegal affect detected and removed.\n",od.name);
	for (j = 0; j < MAX_AFFECT; j++)
	{
    	  od.affected[j].type = 0;
    	  od.affected[j].duration = 0;
    	  od.affected[j].modifier = 0;
    	  od.affected[j].location = 0;
    	  od.affected[j].bitvector = 0;
    	  od.affected[j].bitvector2 = 0;
    	  od.affected[j].next = 0;
   	}
	break;
      }
    }
#endif

#ifdef _QUESTFIX_
  od.saved.quest_pts = 0;
#endif

#ifdef _GOLDFIX_
  od.points.bank_gold -= (int)(od.points.bank_gold * 0.90);
  od.points.bank_gold -= (int)(od.points.bank_gold * 0.50);
  od.points.gold -= (int)(od.points.gold * 0.90);
  od.points.gold -= (int)(od.points.gold * 0.50);
#endif

#ifdef _PWORDCHANGE_
    // ONE time only hopefully, re encrypt passwords, remove old flag
   if (od.saved.changed_password )
   {
     printf("%s password changed from %s to ",od.name,od.pwd);
     strncpy(od.pwd, (char *) crypt(od.pwd, od.pwd), MAX_PWD_LENGTH);
     od.pwd[MAX_PWD_LENGTH] = '\0';
     printf("%s\n",od.pwd);
     od.saved.changed_password = 0;
   }
#endif

#ifdef _PLR2FLAGFIX_
  // reorder some PLR2 flags around...
  if (IS_SET(od.saved.plr2_flags, PLR2_MADEPT))
    SET_BIT(od.saved.plr2_flags, PLR2_CLAN_ASS);

  if (IS_SET(od.saved.plr2_flags, PLR2_DRUID))
    SET_BIT(od.saved.plr2_flags, PLR2_IPP);

  if (IS_SET(od.saved.plr2_flags, (1 << 11)))
    SET_BIT(od.saved.plr2_flags, PLR2_MENTOR);

  // now remove the 1st
  REMOVE_BIT(od.saved.plr2_flags, PLR2_MADEPT | PLR2_DRUID | (1 << 11));
#endif

   fwrite(&od, sizeof(od), 1, outfp);
   n++;
  }

  // cleanup
  fclose(infp);
  fclose(outfp);
  printf("../lib/misc/players.new created.\n");
  printf("%d players checked and updated.\n", n);
  return 1;
}