ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/util/guilds.pl
(Generate patch)

Comparing deliantra/util/guilds.pl (file contents):
Revision 1.5 by pippijn, Sun Dec 3 01:27:45 2006 UTC vs.
Revision 1.6 by pippijn, Sun Dec 3 12:03:58 2006 UTC

30 30
31sub init { 31sub init {
32 chdir $PLAYERDIR; 32 chdir $PLAYERDIR;
33 33
34 for my $pl (<*>) { 34 for my $pl (<*>) {
35 my $mtime = (stat $pl)[9];
36 my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die "$pl/$pl.pl: $!"; <$fh> }; 35 my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die "$pl/$pl.pl: $!"; <$fh> };
37 36
38 for my $guild (keys %slaying) { 37 for my $guild (keys %slaying) {
39 $pldata =~ /^slaying $slaying{$guild}$/m && push @{ $members{$guild} }, $pl; 38 $pldata =~ /^slaying $slaying{$guild}$/m && push @{ $members{$guild} }, $pl;
40 } 39 }
41 } 40 }
42 41
43 for my $guild (keys %slaying) { 42 for my $guild (keys %slaying) {
44 $count{$guild} = @{ $members{$guild} }; 43 $count{$guild} = @{ $members{$guild} };
44 }
45}
46
47sub init_with_age {
48 my ($age) = @_;
49 chdir $PLAYERDIR;
50
51 for my $pl (<*>) {
52 my $mtime = (stat $pl)[9];
53 my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die "$pl/$pl.pl: $!"; <$fh> };
54
55 for my $guild (keys %slaying) {
56 $pldata =~ /^slaying $slaying{$guild}$/m && push @{ $members{$guild} }, $pl
57 if ($NOW - $mtime < $age * 24 * 3600);
58 }
59 }
60
61 for my $guild (keys %slaying) {
62 $count{$guild} = @{ $members{$guild} } if $members{$guild};
45 } 63 }
46} 64}
47 65
48sub in_days { 66sub in_days {
49 my ($secs) = @_; 67 my ($secs) = @_;
57} 75}
58 76
59sub members_mtime_avg { 77sub members_mtime_avg {
60 my %mtime; 78 my %mtime;
61 init; 79 init;
80
62 print STDERR "Guild: mtime:\n"; 81 print STDERR "Guild: mtime:\n";
63 print STDERR "-" x 26 . "\n"; 82 print STDERR "-" x 26 . "\n";
64 for my $guild (keys %slaying) { 83 for my $guild (keys %slaying) {
65 for my $member (@{ $members{$guild} }) { 84 for my $member (@{ $members{$guild} }) {
66 $mtime{$guild} += (stat "$member")[9]; 85 $mtime{$guild} += (stat "$member")[9];
71} 90}
72 91
73sub members_mtime_max { 92sub members_mtime_max {
74 my %mtime; 93 my %mtime;
75 init; 94 init;
95
76 print STDERR "Guild: mtime:\n"; 96 print STDERR "Guild: mtime:\n";
77 print STDERR "-" x 26 . "\n"; 97 print STDERR "-" x 26 . "\n";
78 for my $guild (keys %slaying) { 98 for my $guild (keys %slaying) {
79 for my $member (@{ $members{$guild} }) { 99 for my $member (@{ $members{$guild} }) {
80 $mtime{$guild} = max +(stat $member)[9], $mtime{$guild}; 100 $mtime{$guild} = max +(stat $member)[9], $mtime{$guild};
82 print $slaying{$guild} . " " x (20 - length $slaying{$guild}) . in_days($mtime{$guild}) . "\n"; 102 print $slaying{$guild} . " " x (20 - length $slaying{$guild}) . in_days($mtime{$guild}) . "\n";
83 } 103 }
84} 104}
85 105
86sub members_cnt { 106sub members_cnt {
107 my ($age) = @_;
108 init_with_age $age
109 if $age;
87 init; 110 init
111 unless $age;
112
88 print STDERR "Guild: members:\n"; 113 print STDERR "Guild: members:\n";
114 print STDERR "-" x 28 . "\n";
89 print $slaying{$_} . " " x (20 - length $slaying{$_}) . $count{$_} . "\n" 115 print $slaying{$_} . " " x (20 - length $slaying{$_}) . ($count{$_} or 0) . "\n"
90 for keys %slaying; 116 for keys %slaying;
91} 117}
92 118
93sub members_list { 119sub members_list {
94 my ($guild, $age) = @_; 120 my ($guild, $age) = @_;
95 init; 121 init;
96 122
113 } 139 }
114} 140}
115 141
116sub usage { 142sub usage {
117 print <<USAGE; 143 print <<USAGE;
118Usage: perl guilds.pl [max|avg|cnt|lst <guild> [<max age>]] 144\033[1mUsage: perl guilds.pl max|avg|cnt|lst <guild> [<max age>]\033[0m
119 145
120 max: max(mtime of all guild members) for each guild 146 max: max(mtime of all guild members) for each guild
121 avg: average mtime of all guild members for each guild 147 avg: average mtime of all guild members for each guild
122 cnt: member count (number of players owning a key) 148 cnt: member count (number of players owning a key)
123 lst: list members for <guild>. lst without <guild> lists all guild names 149 lst: list members for \033[1m<guild>\033[0m. lst without \033[1m<guild>\033[0m lists all guild names
150
124 <max age> is the maximum time in days a player can be logged out 151 The optional <max age> is the maximum time in days a player can be
125 and still appear on the list 152 logged out and still appear on the list. \033[1m<max age>\033[0m only applies
153 to \033[1mcnt\033[0m and \033[1mlst\033[0m.
126 154
127Copyright (C) 2006 The Crossfire+ Development Team 155Copyright (C) 2006 The Crossfire+ Development Team
128USAGE 156USAGE
129} 157}
130 158
131if ($ARGV[0] eq "max") { 159if ($ARGV[0] eq "max") {
132 members_mtime_max; 160 members_mtime_max;
133} elsif ($ARGV[0] eq "avg") { 161} elsif ($ARGV[0] eq "avg") {
134 members_mtime_avg; 162 members_mtime_avg;
135} elsif ($ARGV[0] eq "cnt") { 163} elsif ($ARGV[0] eq "cnt") {
136 members_cnt; 164 members_cnt $ARGV[1];
137} elsif ($ARGV[0] eq "lst") { 165} elsif ($ARGV[0] eq "lst") {
138 members_list $ARGV[1], $ARGV[2]; 166 members_list $ARGV[1], $ARGV[2];
139} else { 167} else {
140 usage; 168 usage;
141} 169}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines