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.1 by pippijn, Fri Dec 1 01:56:50 2006 UTC vs.
Revision 1.4 by pippijn, Sun Dec 3 00:59:38 2006 UTC

1#!/usr/bin/env perl 1#!/usr/bin/env perl
2 2
3# Script to help making assertions on guild activity 3# Script to help drawing conclusions on guild activity
4# Usage is at the bottom 4# Usage is at the bottom
5 5
6use strict; 6use strict;
7use List::Util qw(max);
7 8
8my $PLAYERDIR = "/var/crossfire/players"; 9my $PLAYERDIR = "/var/crossfire/players";
9 10
10my $NOW = time; 11my $NOW = time;
11 12
12my @black_shield; 13my %slaying = (
13my @damned_heretics; 14 bs => "black_shield",
14my @dreaming_sage; 15 dh => "damned_heretics",
15my @drunken_barbarian; 16 ds => "dreaming_sage",
16my @laughing_skull; 17 db => "drunken_barbarian",
17my @mailed_fist; 18 ls => "laughing_skull",
18my @poisoned_dagger; 19 mf => "mailed_fist",
19my @purple_butterfly; 20 pd => "poisoned_dagger",
20my @smoking_cauldron; 21 pb => "purple_butterfly",
21my @ketsueki_itsuryuu; 22 sc => "smoking_cauldron",
22my @nenshou_youso; 23 ki => "ketsueki_itsuryuu",
23my @zaseki_dzuki_ryoku; 24 ny => "nenshou_youso",
25 zdr => "zaseki_dzuki_ryoku"
26);
24 27
25chdir $PLAYERDIR; 28my %members;
29my %count;
30my %mtime;
26 31
27for my $pl (<*>) { 32sub init {
28 my $mtime = (stat $pl)[9]; 33 chdir $PLAYERDIR;
29 my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die; <$fh> };
30 34
31 push @black_shield, $pl if $pldata =~ /black_shield/; 35 for my $pl (<*>) {
32 push @damned_heretics, $pl if $pldata =~ /damned_heretics/; 36 my $mtime = (stat $pl)[9];
33 push @dreaming_sage, $pl if $pldata =~ /dreaming_sage/; 37 my $pldata = do { local $/; open my $fh, "<$pl/$pl.pl" or die "$pl/$pl.pl: $!"; <$fh> };
34 push @drunken_barbarian, $pl if $pldata =~ /drunken_barbarian/; 38
35 push @laughing_skull, $pl if $pldata =~ /laughing_skull/; 39 for my $guild (keys %slaying) {
36 push @mailed_fist, $pl if $pldata =~ /mailed_fist/; 40 $pldata =~ /^slaying $slaying{$guild}$/m && push @{ $members{$guild} }, $pl;
37 push @poisoned_dagger, $pl if $pldata =~ /poisoned_dagger/; 41 }
38 push @purple_butterfly, $pl if $pldata =~ /purple_butterfly/; 42 }
39 push @smoking_cauldron, $pl if $pldata =~ /smoking_cauldron/; 43
40 push @ketsueki_itsuryuu, $pl if $pldata =~ /ketsueki_itsuryuu/; 44 for my $guild (keys %slaying) {
41 push @nenshou_youso, $pl if $pldata =~ /nenshou_youso/; 45 $count{$guild} = @{ $members{$guild} };
42 push @zaseki_dzuki_ryoku, $pl if $pldata =~ /zaseki_dzuki_ryoku/; 46 }
43} 47}
44
45my $bs_cnt = @black_shield;
46my $dh_cnt = @damned_heretics;
47my $ds_cnt = @dreaming_sage;
48my $db_cnt = @drunken_barbarian;
49my $ls_cnt = @laughing_skull;
50my $mf_cnt = @mailed_fist;
51my $pd_cnt = @poisoned_dagger;
52my $pb_cnt = @purple_butterfly;
53my $sc_cnt = @smoking_cauldron;
54my $ki_cnt = @ketsueki_itsuryuu;
55my $ny_cnt = @nenshou_youso;
56my $zdr_cnt = @zaseki_dzuki_ryoku;
57 48
58sub in_days { 49sub in_days {
59 my ($secs) = @_; 50 my ($secs) = @_;
60 ($NOW - $secs) / 3600 / 24; 51 ($NOW - $secs) / 3600 / 24;
61} 52}
62 53
54sub 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
63sub members_mtime_avg { 60sub members_mtime_avg {
64 my ($bs_mtime, $dh_mtime, $ds_mtime, $db_mtime, $ls_mtime, $mf_mtime) = 0; 61 init;
65 my ($pd_mtime, $pb_mtime, $sc_mtime, $ki_mtime, $ny_mtime, $zdr_mtime) = 0; 62 print "Guild: mtime:\n";
66 63 for my $guild (keys %slaying) {
67 for my $bs_member (@black_shield) { 64 for my $member (@{ $members{$guild} }) {
68 $bs_mtime += (stat "$bs_member")[9]; 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 } 69 }
70
71 for my $dh_member (@damned_heretics) {
72 $dh_mtime += (stat "$dh_member")[9];
73 }
74
75 for my $ds_member (@dreaming_sage) {
76 $ds_mtime += (stat "$ds_member")[9];
77 }
78
79 for my $db_member (@drunken_barbarian) {
80 $db_mtime += (stat "$db_member")[9];
81 }
82
83 for my $ls_member (@laughing_skull) {
84 $ls_mtime += (stat "$ls_member")[9];
85 }
86
87 for my $mf_member (@mailed_fist) {
88 $mf_mtime += (stat "$mf_member")[9];
89 }
90
91 for my $pd_member (@poisoned_dagger) {
92 $pd_mtime += (stat "$pd_member")[9];
93 }
94
95 for my $pb_member (@purple_butterfly) {
96 $pb_mtime += (stat "$pb_member")[9];
97 }
98
99 for my $sc_member (@smoking_cauldron) {
100 $sc_mtime += (stat "$sc_member")[9];
101 }
102
103 for my $ki_member (@ketsueki_itsuryuu) {
104 $ki_mtime += (stat "$ki_member")[9];
105 }
106
107 for my $ny_member (@nenshou_youso) {
108 $ny_mtime += (stat "$ny_member")[9];
109 }
110
111 for my $zdr_member (@zaseki_dzuki_ryoku) {
112 $zdr_mtime += (stat "$zdr_member")[9];
113 }
114
115 $bs_mtime = $bs_mtime / $bs_cnt;
116 $dh_mtime = $dh_mtime / $dh_cnt;
117 $ds_mtime = $ds_mtime / $ds_cnt;
118 $db_mtime = $db_mtime / $db_cnt;
119 $ls_mtime = $ls_mtime / $ls_cnt;
120 $mf_mtime = $mf_mtime / $mf_cnt;
121 $pd_mtime = $pd_mtime / $pd_cnt;
122 $pb_mtime = $pb_mtime / $pb_cnt;
123 $sc_mtime = $sc_mtime / $sc_cnt;
124 $ki_mtime = $ki_mtime / $ki_cnt;
125 $ny_mtime = $ny_mtime / $ny_cnt;
126 $zdr_mtime = $zdr_mtime / $zdr_cnt;
127
128 print "Guild: mtime:\n";
129 print "black_shield: ".in_days($bs_mtime)."\n";
130 print "damned_heretics: ".in_days($dh_mtime)."\n";
131 print "dreaming_sage: ".in_days($ds_mtime)."\n";
132 print "drunken_barbarian: ".in_days($db_mtime)."\n";
133 print "laughing_skull: ".in_days($ls_mtime)."\n";
134 print "mailed_fist: ".in_days($mf_mtime)."\n";
135 print "poisoned_dagger: ".in_days($pd_mtime)."\n";
136 print "purple_butterfly: ".in_days($pb_mtime)."\n";
137 print "smoking_cauldron: ".in_days($sc_mtime)."\n";
138 print "ketsueki_itsuryuu: ".in_days($ki_mtime)."\n";
139 print "nenshou_youso: ".in_days($ny_mtime)."\n";
140 print "zaseki_dzuki_ryoku: ".in_days($zdr_mtime)."\n";
141} 70}
142 71
143sub members_mtime_max { 72sub members_mtime_max {
144 my ($bs_mtime, $dh_mtime, $ds_mtime, $db_mtime, $ls_mtime, $mf_mtime) = 0; 73 init;
145 my ($pd_mtime, $pb_mtime, $sc_mtime, $ki_mtime, $ny_mtime, $zdr_mtime) = 0; 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 }
81}
146 82
147 for my $bs_member (@black_shield) { 83sub members_cnt {
148 $bs_member = (stat "$bs_member")[9]; 84 init;
149 $bs_mtime = $bs_member if $bs_member > $bs_mtime; 85 print "Guild: members:\n";
86 print $slaying{$_} . " " x (20 - length $slaying{$_}) . $count{$_} . "\n"
87 for keys %slaying;
88}
89
90sub 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;
150 } 101 }
151
152 for my $dh_member (@damned_heretics) {
153 $dh_member = (stat "$dh_member")[9];
154 $dh_mtime = $dh_member if $dh_member > $dh_mtime;
155 }
156
157 for my $ds_member (@dreaming_sage) {
158 $ds_member = (stat "$ds_member")[9];
159 $ds_mtime = $ds_member if $ds_member > $ds_mtime;
160 }
161
162 for my $db_member (@drunken_barbarian) {
163 $db_member = (stat "$db_member")[9];
164 $db_mtime = $db_member if $db_member > $db_mtime;
165 }
166
167 for my $ls_member (@laughing_skull) {
168 $ls_member = (stat "$ls_member")[9];
169 $ls_mtime = $ls_member if $ls_member > $ls_mtime;
170 }
171
172 for my $mf_member (@mailed_fist) {
173 $mf_member = (stat "$mf_member")[9];
174 $mf_mtime = $mf_member if $mf_member > $mf_mtime;
175 }
176
177 for my $pd_member (@poisoned_dagger) {
178 $pd_member = (stat "$pd_member")[9];
179 $pd_mtime = $pd_member if $pd_member > $pd_mtime;
180 }
181
182 for my $pb_member (@purple_butterfly) {
183 $pb_member = (stat "$pb_member")[9];
184 $pb_mtime = $pb_member if $pb_member > $pb_mtime;
185 }
186
187 for my $sc_member (@smoking_cauldron) {
188 $sc_member = (stat "$sc_member")[9];
189 $sc_mtime = $sc_member if $sc_member > $sc_mtime;
190 }
191
192 for my $ki_member (@ketsueki_itsuryuu) {
193 $ki_member = (stat "$ki_member")[9];
194 $ki_mtime = $ki_member if $ki_member > $ki_mtime;
195 }
196
197 for my $ny_member (@nenshou_youso) {
198 $ny_member = (stat "$ny_member")[9];
199 $ny_mtime = $ny_member if $ny_member > $ny_mtime;
200 }
201
202 for my $zdr_member (@zaseki_dzuki_ryoku) {
203 $zdr_member = (stat "$zdr_member")[9];
204 $zdr_mtime = $zdr_member if $zdr_member > $zdr_mtime;
205 }
206
207 print "Guild: mtime:\n";
208 print "black_shield: ".in_days($bs_mtime)."\n";
209 print "damned_heretics: ".in_days($dh_mtime)."\n";
210 print "dreaming_sage: ".in_days($ds_mtime)."\n";
211 print "drunken_barbarian: ".in_days($db_mtime)."\n";
212 print "laughing_skull: ".in_days($ls_mtime)."\n";
213 print "mailed_fist: ".in_days($mf_mtime)."\n";
214 print "poisoned_dagger: ".in_days($pd_mtime)."\n";
215 print "purple_butterfly: ".in_days($pb_mtime)."\n";
216 print "smoking_cauldron: ".in_days($sc_mtime)."\n";
217 print "ketsueki_itsuryuu: ".in_days($ki_mtime)."\n";
218 print "nenshou_youso: ".in_days($ny_mtime)."\n";
219 print "zaseki_dzuki_ryoku: ".in_days($zdr_mtime)."\n";
220} 102}
221 103
222sub usage { 104sub usage {
223 print <<USAGE; 105 print <<USAGE;
224Usage: perl guilds.pl [max|avg] 106Usage: perl guilds.pl [max|avg|cnt|lst <guild>]
225 107
226 max: max(mtime of all guild members) for each guild 108 max: max(mtime of all guild members) for each guild
227 avg: average mtime of all guild members for each guild 109 avg: average mtime of all guild members for each guild
110 cnt: member count (number of players owning a key)
111 lst: list members for <guild>. lst without <guild> lists all guild names
228 112
229Copyright (C) 2006 The Crossfire+ Development Team 113Copyright (C) 2006 The Crossfire+ Development Team
230USAGE 114USAGE
231} 115}
232 116
233if ($ARGV[0] eq "max") { 117if ($ARGV[0] eq "max") {
234 members_mtime_max; 118 members_mtime_max;
235} elsif ($ARGV[0] eq "avg") { 119} elsif ($ARGV[0] eq "avg") {
236 members_mtime_avg; 120 members_mtime_avg;
121} elsif ($ARGV[0] eq "cnt") {
122 members_cnt;
123} elsif ($ARGV[0] eq "lst") {
124 members_list $ARGV[1];
237} else { 125} else {
238 usage; 126 usage;
239} 127}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines