blib/lib/Games/Quake/Stats.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 10 | 12 | 83.3 |
branch | n/a | ||
condition | n/a | ||
subroutine | 4 | 4 | 100.0 |
pod | n/a | ||
total | 14 | 16 | 87.5 |
line | stmt | bran | cond | sub | pod | time | code | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | package Games::Quake::Stats; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | ################################################################################### | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | # This module provides simple mechanisms for collecting and displaying game | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | # statisitics for the Quake, Quake2, Quake2world, and Quake 3 games. It works | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | # by reading the fraglog file created by Quake servers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | # You can specify the fraglog file when the object is constructed, the module | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | # compiles statistics for each player that appears in the log. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | # The Games::Quake::Stats module can create simple bar charts showing | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13 | # the relative statistics of each player, and can generate textual and pre- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14 | # formed HTML output (HTML output shows the graphs created). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | ################################################################################### | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18 | 1 | 1 | 33735 | use strict; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 37 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19 | 1 | 1 | 5 | use warnings; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21 | 1 | 1 | 591 | use Games::Quake::Player; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 24 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
22 | 1 | 1 | 558 | use GD::Graph::hbars; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
23 | use GD::Graph::colour; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
24 | use Carp; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
25 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 | require Exporter; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
28 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
29 | our @ISA = qw(Exporter); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
30 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31 | # Items to export into callers namespace by default. Note: do not export | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
32 | # names by default without a very good reason. Use EXPORT_OK instead. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33 | # Do not simply export all your public functions/methods/constants. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
34 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
35 | # This allows declaration use Games::Quake::Stats ':all'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
36 | # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
37 | # will save memory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
38 | our %EXPORT_TAGS = ( 'all' => [ qw( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
39 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
40 | ) ] ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
41 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
42 | our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
43 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
44 | our @EXPORT = qw( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
45 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
46 | ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
47 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
48 | our $VERSION = '0.05'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
49 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
50 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
51 | # Preloaded methods go here. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
52 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
53 | ################################################## | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
54 | # object constructor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
55 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
56 | sub new { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
57 | my $invocant = shift; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
58 | my $class = ref($invocant) || $invocant; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
59 | my $self = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
60 | _stats_graph => undef, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
61 | _skill_graph => undef, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
62 | _frag_log => undef, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 | _frag_data => [], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
64 | _players => {}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
65 | @_, # Override previous attributes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
66 | }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
67 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
68 | bless $self, $class; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
69 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
70 | if($self->{_frag_log}){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
71 | $self->get_frag_data($self->{_frag_log}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
72 | $self->initialize(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
73 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
74 | else{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
75 | $self->initialize(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
76 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
77 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
78 | return bless $self, $class; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
79 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
80 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
81 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
82 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
83 | sub initialize{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
84 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
85 | my ($self) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
86 | my $frag_data = $self->{_frag_data}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
87 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
88 | foreach my $frag (@$frag_data){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
89 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
90 | my $fragger = $frag->[0]; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
91 | my $fraggee = $frag->[1]; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
92 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
93 | # fraggee | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
94 | my $fragged_player = Player->new( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
95 | _name => $fraggee, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
96 | ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
97 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
98 | my $found_fraggee = $self->{_players}->{$fraggee}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
99 | if(!$found_fraggee){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
100 | $self->{_players}->{$fraggee} = $fragged_player; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
101 | $fragged_player->inc_times_fragged(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
102 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
103 | else{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
104 | $found_fraggee->inc_times_fragged(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
105 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
106 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
107 | # player | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
108 | my $player = Player->new( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
109 | _name => $fragger, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
110 | ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
111 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
112 | my $found_player = $self->{_players}->{$fragger}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
113 | if(!$found_player){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
114 | $self->{_players}->{$fragger} = $player; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
115 | $player->update_stats($fraggee); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
116 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
117 | else{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
118 | $found_player->update_stats($fraggee); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
119 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
120 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
121 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
122 | foreach my $player_name (keys %{$self->{_players}}){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
123 | my $player = $self->{_players}->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
124 | my $total_frags = $player->total_frags(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
125 | my $times_fragged = $player->times_fragged(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
126 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
127 | if($times_fragged == 0){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
128 | $times_fragged = 1; # avoid divide by zero | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
129 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
130 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
131 | $player->{_skill} = $total_frags/$times_fragged; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
132 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
133 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
134 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
135 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
136 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
137 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
138 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
139 | ######################################################################## | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
140 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
141 | # Subroutines | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
142 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
143 | ######################################################################## | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
144 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
145 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
146 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
147 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
148 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
149 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
150 | # get_player | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
151 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
152 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
153 | sub get_player{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
154 | my ($self, $player_name) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
155 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
156 | my $players = $self->{_players}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
157 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
158 | return $players->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
159 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
160 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
161 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
162 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
163 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
164 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
165 | # times_fragged | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
166 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
167 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
168 | sub times_fragged{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
169 | my ($self, $player_name1, $player_name2) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
170 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
171 | my $player1 = $self->{_players}->{$player_name1}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
172 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
173 | if(!$player1){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
174 | croak "times_fragged: no such player ($player_name1)\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
175 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
176 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
177 | if(!$player_name2){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
178 | return $player1->times_fragged(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
179 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
180 | else{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
181 | my $player2 = $self->{_players}->{$player_name2}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
182 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
183 | if(!$player2){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
184 | croak "times_fragged: no such player ($player_name2)\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
185 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
186 | return $player1->times_fragged_player($player_name2); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
187 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
188 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
189 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
190 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
191 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
192 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
193 | # total_frags | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
194 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
195 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
196 | sub total_frags{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
197 | my ($self, $player_name) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
198 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
199 | my $player = $self->{_players}->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
201 | if(!$player){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
202 | croak "total_frags: no such player ($player_name)\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
203 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
204 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
205 | return $player->total_frags(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
206 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
207 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
208 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
209 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
210 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
211 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
212 | # skill_level | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
213 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
214 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
215 | sub skill_level{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
216 | my ($self, $player_name) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
217 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
218 | my $player = $self->{_players}->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
219 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
220 | if(!$player){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
221 | croak "total_frags: no such player ($player_name)\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
222 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
223 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
224 | my $total_frags = $player->total_frags(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
225 | my $times_fragged = $player->times_fragged(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
226 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
227 | return $total_frags/$times_fragged; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
228 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
229 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
230 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
231 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
232 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
233 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
234 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
235 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
236 | # generate_text | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
237 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
238 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
239 | sub generate_text{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
240 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
241 | my ($self) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
242 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
243 | my $players = $self->{_players}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
244 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
245 | print "frag log statistics\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
246 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
247 | foreach my $player_name (keys %$players){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
248 | my $player = $players->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
249 | print "Player: " . $player->name() . ", total_frags: " . $player->total_frags() . "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
250 | foreach my $player_fragged_name (keys %$players){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
251 | my $player_fragged = $players->{$player_fragged_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
252 | print " " . $player_fragged->name() . " " . $player->times_fragged_player($player_fragged->name()) . "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
253 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
254 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
255 | return 1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
256 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
257 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
258 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
259 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
260 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
261 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
262 | # generate_graph | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
263 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
264 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
265 | sub generate_stats_graph | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
266 | { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
267 | my ($self, $graph_file) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
268 | my $players = $self->{_players}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
269 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
270 | if(!$graph_file){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
271 | $graph_file = $self->{_stats_graph}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
272 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
273 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
274 | my $data_ref = []; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
275 | my @player_names; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
276 | my $max_y = 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
277 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
278 | push(@player_names, "total (- self-inflicted)"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
279 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
280 | foreach my $player_name (sort(keys %$players)){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
281 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
282 | my $player = $players->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
283 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
284 | push(@player_names, $player->name()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
285 | push(@{$data_ref->[0]}, $player->name()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
286 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
287 | my $total_frags = $player->total_frags(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
288 | push(@{$data_ref->[1]}, $total_frags); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
289 | if ($total_frags > $max_y){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
290 | $max_y = $total_frags; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
291 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
292 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
293 | my $i = 2; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
294 | foreach my $player_fragged_name (sort(keys %$players)){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
295 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
296 | my $player_fragged = $players->{$player_fragged_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
297 | my $times_fragged_player = $player->times_fragged_player($player_fragged->name()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
298 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
299 | push(@{$data_ref->[$i]}, $times_fragged_player); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
300 | $i++; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
301 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
302 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
303 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
304 | my $my_graph = GD::Graph::hbars->new(550,550); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
305 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
306 | $my_graph->set( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
307 | x_label => 'player', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
308 | y_label => 'frags', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
309 | title => 'manliness', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
310 | bar_spacing => 1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
311 | bargroup_spacing => 10, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
312 | legend_spacing => 3, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
313 | legend_placement => 'RT', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
314 | show_values => 1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
315 | y_max_value => $max_y + int($max_y/10), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
316 | #x_label_position => 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
317 | dclrs => [ ( "orange", "lgreen", "#0050FF", "dgreen", "#00BBBB", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
318 | "dblue", "dred", "blue", "dpurple", "lgray" ) ], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
319 | ) or warn $my_graph->error; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
320 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
321 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
322 | $my_graph->set_legend(@player_names); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
323 | $my_graph->plot($data_ref) or croak $my_graph->error; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
324 | my $ext = $my_graph->export_format; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
325 | my $outfile; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
326 | open($outfile, ">$graph_file") or croak "Could not open $graph_file: $!\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
327 | binmode $outfile; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
328 | print $outfile $my_graph->gd->$ext(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
329 | close $outfile; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
330 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
331 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
332 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
333 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
334 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
335 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
336 | # generate_skill_graph | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
337 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
338 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
339 | sub generate_skill_graph | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
340 | { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
341 | my ($self, $skill_graph_file) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
342 | my $players = $self->{_players}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
343 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
344 | if(!$skill_graph_file){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
345 | $skill_graph_file = $self->{_skill_graph}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
346 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
347 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
348 | my $data_ref = []; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
349 | my @player_names; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
350 | my $max_y = 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
351 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
352 | push(@player_names, "skill (frags/fragged * 100)"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
353 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
354 | foreach my $player_name (sort(keys %$players)){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
355 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
356 | my $player = $players->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
357 | push(@player_names, $player_name); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
358 | push(@{$data_ref->[0]}, $player_name); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
359 | my $skill = sprintf("%0.2f", $player->{_skill} * 100); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
360 | push(@{$data_ref->[1]}, $skill); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
361 | if ($skill > $max_y){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
362 | $max_y = $skill; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
363 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
364 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
365 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
366 | my $my_graph = GD::Graph::hbars->new(550,550); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
367 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
368 | $my_graph->set( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
369 | x_label => 'player', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
370 | y_label => 'skill (% frags/fragged)', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
371 | title => 'skill', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
372 | bar_spacing => 1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
373 | bargroup_spacing => 50, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
374 | legend_spacing => 5, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
375 | legend_placement => 'RT', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
376 | show_values => 1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
377 | y_max_value => $max_y + int($max_y/10), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
378 | #x_label_position => 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
379 | dclrs => [ ( "#017797", "dpurple", "dred", "dgreen", "blue", "green", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
380 | "lblue", "dgray", "dgreen", "dblue", "marine" ) ], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
381 | ) or warn $my_graph->error; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
382 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
383 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
384 | $my_graph->set_legend(@player_names); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
385 | $my_graph->plot($data_ref) or croak $my_graph->error; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
386 | my $ext = $my_graph->export_format; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
387 | my $outfile; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
388 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
389 | open($outfile, ">$skill_graph_file") or croak "Could not open $skill_graph_file: $!\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
390 | binmode $outfile; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
391 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
392 | print $outfile $my_graph->gd->$ext(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
393 | close $outfile; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
394 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
395 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
396 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
397 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
398 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
399 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | # generate_html | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
402 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | sub generate_html{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | my ($self, $graph_base_url) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
407 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
408 | my $players = $self->{_players}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
409 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
410 | my $graph_file = $self->{_stats_graph}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
411 | my $skill_graph_file = $self->{_skill_graph}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
412 | my $graph_file_short; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
413 | my $skill_graph_file_short; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
414 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
415 | if($graph_file){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
416 | my @path_components = split('/', $graph_file); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
417 | $graph_file_short = pop(@path_components); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
418 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
419 | if($skill_graph_file){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
420 | my @path_components = split('/', $skill_graph_file); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
421 | $skill_graph_file_short = pop(@path_components); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
422 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
423 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
424 | print "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
425 | print " |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
426 | print "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
427 | print "frag log statistics"; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
428 | print "
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
437 | print " the numbers don't lie "; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
438 | print "\n"; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
439 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
440 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
441 | foreach my $player_name (sort(keys %$players)){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
442 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
443 | my $player = $players->{$player_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
444 | my $total_frags = $player->total_frags(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
445 | my $times_fragged = $player->times_fragged(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
446 | my $name = $player->name(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
447 | my $skill = $player->{_skill}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
448 | my $skill_str = sprintf("%0.2f", $skill * 100); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
449 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
450 | print " $name: total_frags: $total_frags\n"; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
451 | print " times fragged: $times_fragged\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
452 | print " skill (total_frags/times_fragged): $skill_str\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
453 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
454 | foreach my $player_fragged_name (keys %$players){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
455 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
456 | my $player_fragged = $players->{$player_fragged_name}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
457 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
458 | if($player_fragged->name() eq $player->name()){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
459 | print " " . $player_fragged->name() . " " . $player->times_fragged_player($player_fragged->name()) . " (self-inflicted)\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
460 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
461 | else{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
462 | print " " . $player_fragged->name() . " " . $player->times_fragged_player($player_fragged->name()) . "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
463 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
464 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
465 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
466 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
467 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
468 | print "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
469 | print "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
470 | print "\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
471 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
472 | return 1; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
473 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
474 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
475 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
476 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
477 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
478 | # get_frag_data | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
479 | # | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
480 | #----------------------------------------------------------------------- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
481 | sub get_frag_data | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
482 | { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
483 | my ($self, $in_file) = @_; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
484 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
485 | open(READF, "<$in_file") || croak "Can't open input file: $in_file. $!"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
486 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
487 | my @lines = |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
488 | my @frags; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
489 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
490 | my $line_num = 0; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
491 | my $orig_line; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
492 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
493 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
494 | foreach my $line (@lines){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
495 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
496 | $orig_line = $line; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
497 | $line_num++; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
498 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
499 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | # strip off the leading \ in a frag line: "\pigvana\ShovelTooth\\n" becomes "pigvana\ShovelTooth\\n" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
501 | $line =~ s/^(\s\s*)*\\//; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
502 | # strip off the trailing \\n in a frag line: "pigvana\ShovelTooth\\n" becomes "pigvana\ShovelTooth" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
503 | $line =~ s/\\\n$//; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
504 | my @names = split(/\\/, $line); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
505 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
506 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
507 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
508 | if(my $num_names = @names != 2){ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
509 | croak "Bad log file- format unknown: (line $line_num) '$orig_line'\n"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
510 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
511 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
512 | push (@frags, \@names); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
513 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
514 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
515 | $self->{_frag_data} = \@frags; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
516 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
517 | return @frags; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
518 | } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
519 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
520 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
521 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
522 | 1; # load successful | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
523 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
524 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
525 | __END__ |