ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/util/guilds.pl
Revision: 1.3
Committed: Sun Dec 3 00:59:21 2006 UTC (17 years, 6 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.2: +78 -209 lines
Log Message:
- added member list for each guild
- optimised script for size and a bit of efficiency

File Contents

# User Rev Content
1 pippijn 1.1 #!/usr/bin/env perl
2    
3     # Script to help making assertions on guild activity
4     # Usage is at the bottom
5    
6     use strict;
7 pippijn 1.3 use List::Util qw(max);
8 pippijn 1.1
9     my $PLAYERDIR = "/var/crossfire/players";
10    
11     my $NOW = time;
12    
13 pippijn 1.3 my %slaying = (
14     bs => "black_shield",
15     dh => "damned_heretics",
16     ds => "dreaming_sage",
17     db => "drunken_barbarian",
18     ls => "laughing_skull",
19     mf => "mailed_fist",
20     pd => "poisoned_dagger",
21     pb => "purple_butterfly",
22     sc => "smoking_cauldron",
23     ki => "ketsueki_itsuryuu",
24     ny => "nenshou_youso",
25     zdr => "zaseki_dzuki_ryoku"
26     );
27    
28     my %members;
29     my %count;
30     my %mtime;
31    
32     sub init {
33     chdir $PLAYERDIR;
34    
35     for my $pl (<*>) {
36     my $mtime = (stat $pl)[9];
37     my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die "$pl/$pl.pl: $!"; <$fh> };
38    
39     for my $guild (keys %slaying) {
40     $pldata =~ /^slaying $slaying{$guild}$/m && push @{ $members{$guild} }, $pl;
41     }
42     }
43    
44     for my $guild (keys %slaying) {
45     $count{$guild} = @{ $members{$guild} };
46     }
47     }
48 pippijn 1.1
49     sub in_days {
50     my ($secs) = @_;
51     ($NOW - $secs) / 3600 / 24;
52     }
53    
54 pippijn 1.3 sub guild_list {
55     print "short name full name\n";
56     print "-" x 27 . "\n";
57     print "$_" . (length $_ == 3 ? "" : " ") . " " x 15 . $slaying{$_} . "\n" for keys %slaying;
58     }
59    
60 pippijn 1.1 sub members_mtime_avg {
61 pippijn 1.3 init;
62     print "Guild: mtime:\n";
63     for my $guild (keys %slaying) {
64     for my $member (@{ $members{$guild} }) {
65     $mtime{$guild} += (stat "$member")[9];
66     }
67     $mtime{$guild} /= $count{$guild};
68     print $slaying{$guild} . " " x (20 - length $slaying{$guild}) . in_days($mtime{$guild}) . "\n";
69 pippijn 1.1 }
70     }
71    
72     sub members_mtime_max {
73 pippijn 1.3 init;
74     print "Guild: mtime:\n";
75     for my $guild (keys %slaying) {
76     for my $member (@{ $members{$guild} }) {
77     $mtime{$guild} = max +(stat $member)[9], $mtime{$guild};
78     }
79     print $slaying{$guild} . " " x (20 - length $slaying{$guild}) . in_days($mtime{$guild}) . "\n";
80 pippijn 1.1 }
81     }
82    
83 pippijn 1.2 sub members_cnt {
84 pippijn 1.3 init;
85 pippijn 1.2 print "Guild: members:\n";
86 pippijn 1.3 print $slaying{$_} . " " x (20 - length $slaying{$_}) . $count{$_} . "\n"
87     for keys %slaying;
88     }
89    
90     sub members_list {
91     init;
92     my ($guild) = @_;
93    
94     if ($guild) {
95     print "Members for guild " . $slaying{$guild} . ":\n";
96     print "-" x 32 . "\n";
97     print "$_\n" for @{ $members{$guild} };
98     } else {
99     guild_list;
100     return;
101     }
102 pippijn 1.2 }
103    
104 pippijn 1.1 sub usage {
105     print <<USAGE;
106 pippijn 1.3 Usage: perl guilds.pl [max|avg|cnt|lst <guild>]
107 pippijn 1.1
108     max: max(mtime of all guild members) for each guild
109     avg: average mtime of all guild members for each guild
110 pippijn 1.2 cnt: member count (number of players owning a key)
111 pippijn 1.3 lst: list members for <guild>. lst without <guild> lists all guild names
112 pippijn 1.1
113     Copyright (C) 2006 The Crossfire+ Development Team
114     USAGE
115     }
116    
117     if ($ARGV[0] eq "max") {
118     members_mtime_max;
119     } elsif ($ARGV[0] eq "avg") {
120     members_mtime_avg;
121 pippijn 1.2 } elsif ($ARGV[0] eq "cnt") {
122     members_cnt;
123 pippijn 1.3 } elsif ($ARGV[0] eq "lst") {
124     members_list $ARGV[1];
125 pippijn 1.1 } else {
126     usage;
127     }