#include <sys/types.h> #include <time.h> #include <sys/time.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "emlen.h" #include "file.c" PLAYERBASE_DATA *playerbase_zero; bool found = FALSE; void save_playerbase (void) { FILE *fp; PLAYERBASE_DATA *player; if ((fp = fopen ("pbase.dat", "w")) == NULL) { fprintf (stderr, "Error on playerbase write.\n"); exit (2); } for (player = playerbase_zero; player != NULL; player = player->next) { if (player->player_level == -1) continue; fprintf (fp, "%s\n", player->player_name); fprintf (fp, "%s\n", player->email_address); fprintf (fp, "%ld\n", player->player_last_login); fprintf (fp, "%d\n", player->player_good); fprintf (fp, "%d\n", player->player_level); fprintf (fp, "%d\n", player->player_nodelete); } fprintf (fp, "\nEND\n"); fclose (fp); return; } void load_playerbase (void) { FILE *fp; PLAYERBASE_DATA *play; char buff[500]; playerbase_zero = NULL; if ((fp = fopen ("pbase.dat", "r")) == NULL) { return; } while (1) { strcpy (buff, fread_word (fp)); if (!str_cmp (buff, "END")) break; play = (PLAYERBASE_DATA *) mem_alloc (sizeof (*play)); play->next = playerbase_zero; playerbase_zero = play; strcpy (play->player_name, buff); strcpy (buff, fread_word (fp)); strcpy (play->email_address, buff); play->player_last_login = fread_number (fp); play->player_good = fread_number (fp); play->player_level = fread_number (fp); play->player_nodelete = fread_number (fp); } fclose (fp); return; } void do_deleteold (void) { time_t now; long maxlimit; char buf[500]; struct timeval now_time; PLAYERBASE_DATA *pb; gettimeofday (&now_time, NULL); now = (time_t) now_time.tv_sec; found = TRUE; for (pb = playerbase_zero; pb != NULL; pb = pb->next) { if (pb->player_level == -1) continue; if (pb->player_nodelete) continue; maxlimit = pb->player_level * 140000; if (maxlimit > 5500000) maxlimit = 5500000; if (maxlimit < 200000) maxlimit = 200000; if ((int) (now - pb->player_last_login) > maxlimit) { sprintf (buf, "rm \"%s%s\" &", PLAYER_DIR_2, pb->player_name); system (buf); sprintf (buf, "rm \"%s%s.cor\" &", PLAYER_DIR_2, pb->player_name); system (buf); sprintf (buf, "rm \"%s%s.tro\" &", PLAYER_DIR_2, pb->player_name); system (buf); pb->player_level = -1; } } save_playerbase (); return; } void do_cleanup (void) { PLAYERBASE_DATA *pb; char buf[500]; found = TRUE; system ("mkdir cleandir"); for (pb = playerbase_zero; pb != NULL; pb = pb->next) { if (!strcmp (pb->player_name, "Blank")) continue; if (pb->player_level == -1) continue; sprintf (buf, "mv %s%s.cor cleandir", PLAYER_DIR, capitalize (pb->player_name)); system (buf); sprintf (buf, "mv %s%s.tro cleandir", PLAYER_DIR, capitalize (pb->player_name)); system (buf); sprintf (buf, "mv %s%s cleandir", PLAYER_DIR, capitalize (pb->player_name)); system (buf); } sprintf (buf, "rm %s*", PLAYER_DIR); system (buf); sprintf (buf, "cp cleandir/* %s", PLAYER_DIR); system (buf); system ("rm cleandir/*"); system ("rmdir cleandir"); return; } void do_refresh (void) { time_t now; struct timeval now_time; PLAYERBASE_DATA *pb; found = TRUE; gettimeofday (&now_time, NULL); now = (time_t) now_time.tv_sec; for (pb = playerbase_zero; pb != NULL; pb = pb->next) { pb->player_last_login = now; } save_playerbase (); return; } int main (int argc, char **argv) { char cmd[500]; char selection = ' '; bool refresh = FALSE; bool cleanup = FALSE; bool deleteold = FALSE; int i; fprintf (stderr, "Utils for Owen Emlen's Aturion Dynasty code, written by Owen Emlen.\n"); fprintf (stderr, "Loading playerbase into memory.\n"); load_playerbase (); for (i = 1; i < argc; i++) { if (!strcmp (argv[i], "-refresh")) refresh = TRUE; if (!strcmp (argv[i], "-cleanup")) cleanup = TRUE; if (!strcmp (argv[i], "-deleteold")) deleteold = TRUE; } if (refresh) do_refresh (); if (cleanup) do_cleanup (); if (deleteold) do_deleteold (); if (!found) { fprintf (stderr, "Valid options are: -refresh -cleanup -deleteold\n"); fprintf (stderr, "-----------------------------------------------\n"); fprintf (stderr, "-refresh sets all to have just 'logged in'\n"); fprintf (stderr, "-cleanup removes all people not on record in the pbase.\n"); fprintf (stderr, "-deleteold removes all people who haven't played in a while.\n"); return 1; } return 0; }