home *** CD-ROM | disk | FTP | other *** search
/ Powerdrive 1997 February / POWERDRIVE0297.ISO / share / rollen / nethack / misc / nhp < prev    next >
Encoding:
Text File  |  1994-12-13  |  2.5 KB  |  88 lines

  1. #!/usr/exp/bin/perl
  2.  
  3. # nhp - nethack player high scores (version 1.0)
  4. #
  5. # Copyright nhk (C) 1993 by John J. Chew, III <jjchew@math.utoronto.ca>
  6. # Modified to nhp by Boudewijn Wayers <dedos4@win.tue.nl>
  7. # This program may be distributed freely as long as it is not modified.
  8. #
  9. # DESCRIPTION
  10. #
  11. # This program lists high scores for players, sorted by the number of
  12. # games they have played, or by the total value of their final scores.  
  13. #
  14. # BUGS
  15. #
  16. # - nhk has been tested only on our local files and may not correctly
  17. #   format unusual killers.  Please report bugs to the address above.
  18. # - nhk stands, for historical reasons, for NetHack Killers.  It does
  19. #   not stand for Nihon Housou Kyoku.
  20. #
  21. # The output looks like:
  22. #
  23. # 17 2660884  156522 javier
  24. # 35  363712   10391 severi
  25. # 11  348840   31712 Ace
  26. # 18  210759   11708 Kroisos
  27. # 11  162996   14817 Efembe
  28. #  8   20603    2575 bloo
  29.  
  30. # configuration variables
  31.  
  32. $CV_DEFAULT_DIRECTORY = '/home/svin04d/dedos4/bin/nethackdir';
  33. $CV_LOGFILE_NAME = 'logfile';
  34. $CV_RECORD_NAME = 'record';
  35.  
  36. sub usage {
  37.   warn "Usage: $0 [ -f file | -l | -r ] [ -n | -s ]\n\n";
  38.   warn "  -f  use indicated file\n";
  39.   warn "  -l  use logfile\n";
  40.   warn "  -r  use record (high score file) [default]\n";
  41.   warn "  -n  sort by number of games played\n";
  42.   warn "  -s  sort by aggregate score [default]\n";
  43.   exit 1;
  44.   }
  45.  
  46. require 'getopts.pl';
  47. &Getopts('f:lnrs') || &usage;
  48. (defined $opt_f) && $opt_l && $opt_r && &usage;
  49. $opt_n && $opt_s && &usage;
  50. $opt_n || $opt_s || ($opt_s = 1);
  51. $FILE = (defined $opt_f) ? $opt_f : 
  52.   $CV_DEFAULT_DIRECTORY . '/' . ($opt_l ? $CV_LOGFILE_NAME : $CV_RECORD_NAME);
  53.  
  54. (defined $opt_f) || $opt_l || ($opt_r = 1);
  55.  
  56. open(FILE, "<$FILE") || die "$0: cannot open $FILE";
  57. @file = <FILE>;
  58. close(FILE);
  59.  
  60. $killlen = 1;
  61. $scorelen = 1;
  62. for $_ (@file) {
  63.   chop;
  64.   # date uid deathdnum deathlev maxlvl hp maxhp points plchar sex name death
  65.   split(/ /, $_, 10); $_ = $_[9]; 
  66.   s/, the shopkeeper//;
  67.   s/,.*//;
  68.   $count{$_}++;
  69.   $killlen = length($count{$_}) if length($count{$_}) > $killlen;
  70.   $score{$_} += $_[7];
  71.   $scorelen = length($score{$_}) if length($score{$_}) > $scorelen;
  72.   }
  73.  
  74. sub mysort { 
  75.   ($A = $a) =~ tr/A-Z/a-z/; ($B = $b) =~ tr/A-Z/a-z/;
  76.   (($opt_n) ? $count{$b} <=> $count{$a} : $score{$b} <=> $score{$a}) 
  77.     || $A cmp $B;
  78.   }
  79.  
  80. for $key (sort mysort keys %count)
  81.   {
  82.   printf "%${killlen}d %${scorelen}d %${scorelen}d %s\n", $count{$key}, $score{$key}, $score{$key}/$count{$key}, $key;
  83.   }
  84.  
  85. exit 0;
  86. __END__
  87.  
  88.