| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package BalanceOfPower::Role::Analyst; |
|
2
|
|
|
|
|
|
|
$BalanceOfPower::Role::Analyst::VERSION = '0.400115'; |
|
3
|
13
|
|
|
13
|
|
5939
|
use strict; |
|
|
13
|
|
|
|
|
44
|
|
|
|
13
|
|
|
|
|
403
|
|
|
4
|
13
|
|
|
13
|
|
136
|
use v5.10; |
|
|
13
|
|
|
|
|
38
|
|
|
5
|
13
|
|
|
13
|
|
58
|
use Moo::Role; |
|
|
13
|
|
|
|
|
20
|
|
|
|
13
|
|
|
|
|
95
|
|
|
6
|
13
|
|
|
13
|
|
3418
|
use Term::ANSIColor; |
|
|
13
|
|
|
|
|
30
|
|
|
|
13
|
|
|
|
|
789
|
|
|
7
|
13
|
|
|
13
|
|
82
|
use BalanceOfPower::Constants ':all'; |
|
|
13
|
|
|
|
|
28
|
|
|
|
13
|
|
|
|
|
7425
|
|
|
8
|
13
|
|
|
13
|
|
84
|
use BalanceOfPower::Utils qw( prev_turn as_title as_title as_subtitle compare_turns); |
|
|
13
|
|
|
|
|
22
|
|
|
|
13
|
|
|
|
|
933
|
|
|
9
|
13
|
|
|
13
|
|
64
|
use BalanceOfPower::Printer; |
|
|
13
|
|
|
|
|
20
|
|
|
|
13
|
|
|
|
|
315
|
|
|
10
|
|
|
|
|
|
|
|
|
11
|
13
|
|
|
13
|
|
61
|
use Data::Dumper; |
|
|
13
|
|
|
|
|
23
|
|
|
|
13
|
|
|
|
|
30106
|
|
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
requires 'diplomacy_exists'; |
|
14
|
|
|
|
|
|
|
requires 'get_borders'; |
|
15
|
|
|
|
|
|
|
requires 'supported'; |
|
16
|
|
|
|
|
|
|
requires 'exists_military_support'; |
|
17
|
|
|
|
|
|
|
requires 'near_nations'; |
|
18
|
|
|
|
|
|
|
requires 'routes_for_node'; |
|
19
|
|
|
|
|
|
|
requires 'get_allies'; |
|
20
|
|
|
|
|
|
|
requires 'get_crises'; |
|
21
|
|
|
|
|
|
|
requires 'get_wars'; |
|
22
|
|
|
|
|
|
|
requires 'print_nation_situation'; |
|
23
|
|
|
|
|
|
|
requires 'print_nation_statistics_header'; |
|
24
|
|
|
|
|
|
|
requires 'print_nation_statistics_line'; |
|
25
|
|
|
|
|
|
|
requires 'get_player'; |
|
26
|
|
|
|
|
|
|
requires 'print_all_crises'; |
|
27
|
|
|
|
|
|
|
requires 'get_attackers'; |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub print_nation_actual_situation |
|
30
|
|
|
|
|
|
|
{ |
|
31
|
1
|
|
|
1
|
0
|
7
|
my $self = shift; |
|
32
|
1
|
|
|
|
|
2
|
my $nation = shift; |
|
33
|
1
|
|
|
|
|
1
|
my $in_the_middle = shift; |
|
34
|
1
|
|
50
|
|
|
9
|
my $mode = shift || 'print'; |
|
35
|
1
|
|
|
|
|
3
|
my $attributes_names = ["Size", "Prod.", "Wealth", "W/D", "Growth", "Disor.", "Army", "Prog.", "Pstg."]; |
|
36
|
1
|
|
|
|
|
3
|
my $attributes = ["production", "wealth", "w/d", "growth", "internal disorder", "army", "progress", "prestige"]; |
|
37
|
|
|
|
|
|
|
|
|
38
|
1
|
|
|
|
|
2
|
my $turn; |
|
39
|
1
|
50
|
|
|
|
3
|
if($in_the_middle) |
|
40
|
|
|
|
|
|
|
{ |
|
41
|
1
|
|
|
|
|
9
|
$turn = prev_turn($self->current_year); |
|
42
|
|
|
|
|
|
|
} |
|
43
|
|
|
|
|
|
|
else |
|
44
|
|
|
|
|
|
|
{ |
|
45
|
0
|
|
|
|
|
0
|
$turn = $self->current_year; |
|
46
|
|
|
|
|
|
|
} |
|
47
|
1
|
|
|
|
|
5
|
my $nation_obj = $self->get_nation($nation); |
|
48
|
1
|
|
|
|
|
8
|
my $under_influence = $self->is_under_influence($nation); |
|
49
|
1
|
|
|
|
|
5
|
my @influence = $self->has_influence($nation); |
|
50
|
1
|
|
|
|
|
8
|
my @ndata = $self->get_nation_statistics_line($nation, $turn, $attributes); |
|
51
|
1
|
|
|
|
|
5
|
my @routes = $self->routes_for_node($nation); |
|
52
|
1
|
|
|
|
|
6
|
my @treaties = $self->get_treaties_for_nation($nation); |
|
53
|
1
|
|
|
|
|
5
|
my @supports = $self->supports($nation); |
|
54
|
1
|
|
|
|
|
7
|
my @rebel_supports = $self->rebel_supports($nation); |
|
55
|
1
|
|
|
|
|
2
|
my $first_row_height; |
|
56
|
1
|
50
|
|
|
|
7
|
if(@treaties > @supports + @rebel_supports) |
|
57
|
|
|
|
|
|
|
{ |
|
58
|
0
|
|
|
|
|
0
|
$first_row_height = @treaties; |
|
59
|
|
|
|
|
|
|
} |
|
60
|
|
|
|
|
|
|
else |
|
61
|
|
|
|
|
|
|
{ |
|
62
|
1
|
|
|
|
|
3
|
$first_row_height = @supports + @rebel_supports; |
|
63
|
|
|
|
|
|
|
} |
|
64
|
1
|
|
|
|
|
6
|
my @crises = $self->get_crises($nation); |
|
65
|
1
|
|
|
|
|
6
|
my @wars = $self->get_wars($nation); |
|
66
|
1
|
|
|
|
|
2
|
my $second_row_height; |
|
67
|
1
|
50
|
|
|
|
5
|
if(@crises > @wars) |
|
68
|
|
|
|
|
|
|
{ |
|
69
|
1
|
|
|
|
|
2
|
$second_row_height = @crises; |
|
70
|
|
|
|
|
|
|
} |
|
71
|
|
|
|
|
|
|
else |
|
72
|
|
|
|
|
|
|
{ |
|
73
|
0
|
|
|
|
|
0
|
$second_row_height = @wars; |
|
74
|
|
|
|
|
|
|
} |
|
75
|
1
|
50
|
|
|
|
5
|
my $latest_order = $self->get_statistics_value($turn, $nation, 'order') ? $self->get_statistics_value($turn, $nation, 'order') : 'NONE'; |
|
76
|
1
|
|
|
|
|
20
|
return BalanceOfPower::Printer::print($mode, $self, 'print_actual_nation_situation', |
|
77
|
|
|
|
|
|
|
{ nation => $nation_obj, |
|
78
|
|
|
|
|
|
|
under_influence => $under_influence, |
|
79
|
|
|
|
|
|
|
influence => \@influence, |
|
80
|
|
|
|
|
|
|
attributes => $attributes_names, |
|
81
|
|
|
|
|
|
|
nationstats => \@ndata, |
|
82
|
|
|
|
|
|
|
traderoutes => \@routes, |
|
83
|
|
|
|
|
|
|
treaties => \@treaties, |
|
84
|
|
|
|
|
|
|
supports => \@supports, |
|
85
|
|
|
|
|
|
|
rebel_supports => \@rebel_supports, |
|
86
|
|
|
|
|
|
|
first_row_height => $first_row_height, |
|
87
|
|
|
|
|
|
|
crises => \@crises, |
|
88
|
|
|
|
|
|
|
wars => \@wars, |
|
89
|
|
|
|
|
|
|
second_row_height => $second_row_height, |
|
90
|
|
|
|
|
|
|
latest_order => $latest_order, |
|
91
|
|
|
|
|
|
|
} ); |
|
92
|
|
|
|
|
|
|
} |
|
93
|
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
sub print_borders_analysis |
|
95
|
|
|
|
|
|
|
{ |
|
96
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
97
|
0
|
|
|
|
|
0
|
my $nation = shift; |
|
98
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
99
|
0
|
|
|
|
|
0
|
my @borders = $self->near_nations($nation, 1); |
|
100
|
0
|
|
|
|
|
0
|
my %data; |
|
101
|
|
|
|
|
|
|
|
|
102
|
0
|
|
|
|
|
0
|
foreach my $b (@borders) |
|
103
|
|
|
|
|
|
|
{ |
|
104
|
0
|
|
|
|
|
0
|
my $rel = $self->diplomacy_exists($nation, $b); |
|
105
|
0
|
|
|
|
|
0
|
$data{$b}->{'relation'} = $rel; |
|
106
|
|
|
|
|
|
|
|
|
107
|
0
|
|
|
|
|
0
|
my $supps = $self->supported($b); |
|
108
|
0
|
0
|
|
|
|
0
|
if($supps) |
|
109
|
|
|
|
|
|
|
{ |
|
110
|
0
|
|
|
|
|
0
|
my $supporter = $supps->start($b); |
|
111
|
0
|
|
|
|
|
0
|
$data{$b}->{'support'}->{nation} = $supporter; |
|
112
|
0
|
|
|
|
|
0
|
my $sup_rel = $self->diplomacy_exists($nation, $supporter); |
|
113
|
0
|
|
|
|
|
0
|
$data{$b}->{'support'}->{relation} = $sup_rel; |
|
114
|
|
|
|
|
|
|
} |
|
115
|
|
|
|
|
|
|
} |
|
116
|
0
|
|
|
|
|
0
|
return BalanceOfPower::Printer::print($mode, $self, 'print_borders_analysis', |
|
117
|
|
|
|
|
|
|
{ nation => $nation, |
|
118
|
|
|
|
|
|
|
borders => \%data } ); |
|
119
|
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
} |
|
121
|
|
|
|
|
|
|
sub print_near_analysis |
|
122
|
|
|
|
|
|
|
{ |
|
123
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
124
|
0
|
|
|
|
|
0
|
my $nation = shift; |
|
125
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
126
|
0
|
|
|
|
|
0
|
my @data = (); |
|
127
|
0
|
|
|
|
|
0
|
my @near = $self->near_nations($nation, 0); |
|
128
|
0
|
|
|
|
|
0
|
foreach my $b (@near) |
|
129
|
|
|
|
|
|
|
{ |
|
130
|
0
|
|
|
|
|
0
|
my $rel = $self->diplomacy_exists($nation, $b); |
|
131
|
0
|
|
|
|
|
0
|
my $reason = $self->in_military_range($nation, $b); |
|
132
|
|
|
|
|
|
|
push @data, { nation => $b, |
|
133
|
|
|
|
|
|
|
relation => $rel, |
|
134
|
|
|
|
|
|
|
how => $reason->{'how'}, |
|
135
|
0
|
|
|
|
|
0
|
who => $reason->{'who'} }; |
|
136
|
|
|
|
|
|
|
} |
|
137
|
0
|
|
|
|
|
0
|
BalanceOfPower::Printer::print($mode, $self, 'print_near_analysis', |
|
138
|
|
|
|
|
|
|
{ nation => $nation, |
|
139
|
|
|
|
|
|
|
near => \@data } ); |
|
140
|
|
|
|
|
|
|
} |
|
141
|
|
|
|
|
|
|
sub print_hotspots |
|
142
|
|
|
|
|
|
|
{ |
|
143
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
144
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
145
|
0
|
|
|
|
|
0
|
my $out = ""; |
|
146
|
0
|
|
|
|
|
0
|
$out .= $self->print_all_crises(undef, 1, $mode); |
|
147
|
0
|
|
|
|
|
0
|
$out .= $self->print_wars(undef, $mode); |
|
148
|
0
|
|
|
|
|
0
|
return $out; |
|
149
|
|
|
|
|
|
|
} |
|
150
|
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
sub print_civil_war_report |
|
152
|
|
|
|
|
|
|
{ |
|
153
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
154
|
0
|
|
|
|
|
0
|
my $nation = shift; |
|
155
|
0
|
0
|
|
|
|
0
|
if (! $self->at_civil_war($nation)) |
|
156
|
|
|
|
|
|
|
{ |
|
157
|
0
|
|
|
|
|
0
|
return "$nation is not fightinh civil war"; |
|
158
|
|
|
|
|
|
|
} |
|
159
|
0
|
|
|
|
|
0
|
my $out = ""; |
|
160
|
0
|
|
|
|
|
0
|
my $nation_obj = $self->get_nation($nation); |
|
161
|
0
|
|
|
|
|
0
|
$out .= "Rebel provinces: " . $nation_obj->rebel_provinces . "/" . PRODUCTION_UNITS->[$nation_obj->size] . "\n"; |
|
162
|
0
|
|
|
|
|
0
|
$out .= "Army: " . $nation_obj->army . "\n"; |
|
163
|
0
|
|
|
|
|
0
|
my $sup = $self->supported($nation); |
|
164
|
0
|
|
|
|
|
0
|
my $rebsup = $self->rebel_supported($nation); |
|
165
|
0
|
0
|
|
|
|
0
|
$out .= "Support: " . $sup->print . "\n" if($sup); |
|
166
|
0
|
0
|
|
|
|
0
|
$out .= "Rebel support: " . $rebsup->print . "\n" if ($rebsup); |
|
167
|
0
|
|
|
|
|
0
|
return $out; |
|
168
|
|
|
|
|
|
|
} |
|
169
|
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
sub print_war_history |
|
171
|
|
|
|
|
|
|
{ |
|
172
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
173
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
174
|
0
|
|
|
|
|
0
|
my %wars; |
|
175
|
|
|
|
|
|
|
my @war_names; |
|
176
|
0
|
|
|
|
|
0
|
foreach my $w (@{$self->memorial}) |
|
|
0
|
|
|
|
|
0
|
|
|
177
|
|
|
|
|
|
|
{ |
|
178
|
0
|
0
|
|
|
|
0
|
if(exists $wars{$w->war_id}) |
|
179
|
|
|
|
|
|
|
{ |
|
180
|
0
|
|
|
|
|
0
|
push @{$wars{$w->war_id}}, $w; |
|
|
0
|
|
|
|
|
0
|
|
|
181
|
|
|
|
|
|
|
} |
|
182
|
|
|
|
|
|
|
else |
|
183
|
|
|
|
|
|
|
{ |
|
184
|
0
|
|
|
|
|
0
|
$wars{$w->war_id} = [ $w ]; |
|
185
|
0
|
|
|
|
|
0
|
push @war_names, { name => $w->war_id, |
|
186
|
|
|
|
|
|
|
start => $w->start_date }; |
|
187
|
|
|
|
|
|
|
} |
|
188
|
|
|
|
|
|
|
} |
|
189
|
|
|
|
|
|
|
sub comp |
|
190
|
|
|
|
|
|
|
{ |
|
191
|
0
|
|
|
0
|
0
|
0
|
compare_turns($a->{start}, $b->{start}); |
|
192
|
|
|
|
|
|
|
} |
|
193
|
0
|
|
|
|
|
0
|
@war_names = sort comp @war_names; |
|
194
|
0
|
|
|
|
|
0
|
return BalanceOfPower::Printer::print($mode, $self, 'print_war_history', |
|
195
|
|
|
|
|
|
|
{ wars => \%wars, |
|
196
|
|
|
|
|
|
|
war_names => \@war_names } ); |
|
197
|
|
|
|
|
|
|
} |
|
198
|
|
|
|
|
|
|
sub print_civil_war_history |
|
199
|
|
|
|
|
|
|
{ |
|
200
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
201
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
202
|
0
|
|
|
|
|
0
|
my %civil_wars; |
|
203
|
|
|
|
|
|
|
my @civil_war_names; |
|
204
|
0
|
|
|
|
|
0
|
foreach my $w (@{$self->civil_memorial}) |
|
|
0
|
|
|
|
|
0
|
|
|
205
|
|
|
|
|
|
|
{ |
|
206
|
0
|
|
|
|
|
0
|
my $name = $w->name . " - " . $w->start_date; |
|
207
|
0
|
|
|
|
|
0
|
$civil_wars{$name} = $w; |
|
208
|
0
|
|
|
|
|
0
|
push @civil_war_names, { name => $name, |
|
209
|
|
|
|
|
|
|
start => $w->start_date }; |
|
210
|
|
|
|
|
|
|
} |
|
211
|
|
|
|
|
|
|
sub civil_comp |
|
212
|
|
|
|
|
|
|
{ |
|
213
|
0
|
|
|
0
|
0
|
0
|
compare_turns($a->{start}, $b->{start}); |
|
214
|
|
|
|
|
|
|
} |
|
215
|
0
|
|
|
|
|
0
|
@civil_war_names = sort civil_comp @civil_war_names; |
|
216
|
0
|
|
|
|
|
0
|
return BalanceOfPower::Printer::print($mode, $self, 'print_civil_war_history', |
|
217
|
|
|
|
|
|
|
{ civil_wars => \%civil_wars, |
|
218
|
|
|
|
|
|
|
civil_war_names => \@civil_war_names } ); |
|
219
|
|
|
|
|
|
|
} |
|
220
|
|
|
|
|
|
|
sub print_treaties_table |
|
221
|
|
|
|
|
|
|
{ |
|
222
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
223
|
0
|
|
|
|
|
0
|
my $out = sprintf "%-20s %-6s %-5s %-5s %-5s", "Nation", "LIMIT", "ALL", "NAG", "COM"; |
|
224
|
0
|
|
|
|
|
0
|
$out .= "\n"; |
|
225
|
0
|
|
|
|
|
0
|
my @nations = @{$self->nation_names}; |
|
|
0
|
|
|
|
|
0
|
|
|
226
|
0
|
|
|
|
|
0
|
for(@nations) |
|
227
|
|
|
|
|
|
|
{ |
|
228
|
0
|
|
|
|
|
0
|
my $n = $_; |
|
229
|
0
|
|
|
|
|
0
|
my $limit = $self->get_nation($n)->treaty_limit; |
|
230
|
0
|
|
|
|
|
0
|
my $alls = $self->get_treaties_for_nation_by_type($n, 'alliance'); |
|
231
|
0
|
|
|
|
|
0
|
my $coms = $self->get_treaties_for_nation_by_type($n, 'commercial'); |
|
232
|
0
|
|
|
|
|
0
|
my $nags = $self->get_treaties_for_nation_by_type($n, 'no aggression'); |
|
233
|
0
|
|
|
|
|
0
|
$out .= sprintf "%-20s %-6s %-5s %-5s %-5s", $n, $limit, $alls, $nags, $coms; |
|
234
|
0
|
|
|
|
|
0
|
$out .= "\n"; |
|
235
|
|
|
|
|
|
|
} |
|
236
|
0
|
|
|
|
|
0
|
return $out; |
|
237
|
|
|
|
|
|
|
} |
|
238
|
|
|
|
|
|
|
sub player_stocks_status |
|
239
|
|
|
|
|
|
|
{ |
|
240
|
10
|
|
|
10
|
0
|
27
|
my $self = shift; |
|
241
|
10
|
|
|
|
|
18
|
my $player = shift; |
|
242
|
10
|
|
|
|
|
41
|
my $player_obj = $self->get_player($player); |
|
243
|
10
|
|
|
|
|
18
|
my $stock_value = 0; |
|
244
|
10
|
|
|
|
|
21
|
my %market_data = (); |
|
245
|
10
|
|
|
|
|
16
|
foreach my $nation(keys %{$player_obj->wallet}) |
|
|
10
|
|
|
|
|
47
|
|
|
246
|
|
|
|
|
|
|
{ |
|
247
|
2
|
50
|
33
|
|
|
13
|
if( $player_obj->stocks($nation) > 0 || $player_obj->influence($nation) > 0) |
|
248
|
|
|
|
|
|
|
{ |
|
249
|
|
|
|
|
|
|
$market_data{$nation} = { 'stocks' => $player_obj->wallet->{$nation}->{stocks}, |
|
250
|
|
|
|
|
|
|
'value' => $self->get_statistics_value(prev_turn($self->current_year), $nation, "w/d"), |
|
251
|
|
|
|
|
|
|
'prev_value' => $self->get_statistics_value(prev_turn(prev_turn($self->current_year)), $nation, "w/d"), |
|
252
|
|
|
|
|
|
|
'influence' => $player_obj->wallet->{$nation}->{influence}, |
|
253
|
2
|
|
|
|
|
20
|
'war_bonds' => $player_obj->wallet->{$nation}->{'war_bonds'}, |
|
254
|
|
|
|
|
|
|
}; |
|
255
|
2
|
|
|
|
|
14
|
$stock_value += $player_obj->wallet->{$nation}->{stocks} * $self->get_statistics_value(prev_turn($self->current_year), $nation, "w/d"); |
|
256
|
|
|
|
|
|
|
} |
|
257
|
|
|
|
|
|
|
} |
|
258
|
10
|
|
|
|
|
31
|
my $total_value = $stock_value + $player_obj->money; |
|
259
|
10
|
|
|
|
|
101
|
return { market_data => \%market_data, |
|
260
|
|
|
|
|
|
|
stock_value => $stock_value, |
|
261
|
|
|
|
|
|
|
money => $player_obj->money, |
|
262
|
|
|
|
|
|
|
total_value => $total_value, |
|
263
|
|
|
|
|
|
|
points => $player_obj->mission_points }; |
|
264
|
|
|
|
|
|
|
} |
|
265
|
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
sub print_stocks |
|
268
|
|
|
|
|
|
|
{ |
|
269
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
270
|
0
|
|
|
|
|
0
|
my $player = shift; |
|
271
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
272
|
0
|
|
|
|
|
0
|
return BalanceOfPower::Printer::print($mode, $self, 'print_stocks', $self->player_stocks_status($player)); |
|
273
|
|
|
|
|
|
|
} |
|
274
|
|
|
|
|
|
|
sub print_all_stocks |
|
275
|
|
|
|
|
|
|
{ |
|
276
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
277
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
278
|
0
|
|
|
|
|
0
|
my %data = (); |
|
279
|
0
|
|
|
|
|
0
|
my @names; |
|
280
|
0
|
|
|
|
|
0
|
for(@{$self->players}) |
|
|
0
|
|
|
|
|
0
|
|
|
281
|
|
|
|
|
|
|
{ |
|
282
|
0
|
|
|
|
|
0
|
my $p = $_; |
|
283
|
0
|
|
|
|
|
0
|
push @names, $p->name; |
|
284
|
0
|
|
|
|
|
0
|
$data{$p->name} = $self->player_stocks_status($p->name); |
|
285
|
|
|
|
|
|
|
} |
|
286
|
0
|
|
|
|
|
0
|
@names = sort { $data{$b}->{total_value} <=> $data{$a}->{total_value} } @names; |
|
|
0
|
|
|
|
|
0
|
|
|
287
|
|
|
|
|
|
|
|
|
288
|
0
|
|
|
|
|
0
|
return BalanceOfPower::Printer::print($mode, $self, 'print_ranking', |
|
289
|
|
|
|
|
|
|
{ players_data => \%data, |
|
290
|
|
|
|
|
|
|
players => \@names }); |
|
291
|
|
|
|
|
|
|
} |
|
292
|
|
|
|
|
|
|
sub print_market |
|
293
|
|
|
|
|
|
|
{ |
|
294
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
295
|
0
|
|
0
|
|
|
0
|
my $mode = shift || 'print'; |
|
296
|
0
|
|
|
|
|
0
|
my @ordered = $self->order_statistics(prev_turn($self->current_year), 'w/d'); |
|
297
|
0
|
|
|
|
|
0
|
my %data = (); |
|
298
|
0
|
|
|
|
|
0
|
my @nations = (); |
|
299
|
0
|
|
|
|
|
0
|
foreach my $stats (@ordered) |
|
300
|
|
|
|
|
|
|
{ |
|
301
|
0
|
|
|
|
|
0
|
my $nation = $self->get_nation($stats->{nation}); |
|
302
|
0
|
|
|
|
|
0
|
push @nations, $stats->{nation}; |
|
303
|
0
|
|
|
|
|
0
|
my $status = ""; |
|
304
|
0
|
0
|
|
|
|
0
|
if($self->at_war($nation->name)) |
|
|
|
0
|
|
|
|
|
|
|
305
|
|
|
|
|
|
|
{ |
|
306
|
0
|
|
|
|
|
0
|
$status = "WAR"; |
|
307
|
|
|
|
|
|
|
} |
|
308
|
|
|
|
|
|
|
elsif($self->at_civil_war($nation->name)) |
|
309
|
|
|
|
|
|
|
{ |
|
310
|
0
|
|
|
|
|
0
|
$status = "CIVILW"; |
|
311
|
|
|
|
|
|
|
} |
|
312
|
|
|
|
|
|
|
$data{$nation->name} = { stocks => $nation->available_stocks, |
|
313
|
|
|
|
|
|
|
wd => $stats->{value}, |
|
314
|
0
|
|
|
|
|
0
|
status => $status }; |
|
315
|
|
|
|
|
|
|
} |
|
316
|
0
|
|
|
|
|
0
|
return BalanceOfPower::Printer::print($mode, $self, 'print_market', |
|
317
|
|
|
|
|
|
|
{ market_data => \%data, |
|
318
|
|
|
|
|
|
|
nations => \@nations } ); |
|
319
|
|
|
|
|
|
|
} |
|
320
|
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
sub wars_info |
|
322
|
|
|
|
|
|
|
{ |
|
323
|
1
|
|
|
1
|
0
|
2
|
my $self = shift; |
|
324
|
1
|
|
|
|
|
2
|
my %grouped_wars; |
|
325
|
1
|
|
|
|
|
6
|
foreach my $w ($self->wars->all()) |
|
326
|
|
|
|
|
|
|
{ |
|
327
|
1
|
50
|
|
|
|
6
|
if(! exists $grouped_wars{$w->war_id}) |
|
328
|
|
|
|
|
|
|
{ |
|
329
|
1
|
|
|
|
|
4
|
$grouped_wars{$w->war_id} = []; |
|
330
|
|
|
|
|
|
|
} |
|
331
|
1
|
|
|
|
|
2
|
push @{$grouped_wars{$w->war_id}}, $w; |
|
|
1
|
|
|
|
|
4
|
|
|
332
|
|
|
|
|
|
|
} |
|
333
|
1
|
|
|
|
|
1
|
my @wars; |
|
334
|
1
|
|
|
|
|
4
|
foreach my $k (keys %grouped_wars) |
|
335
|
|
|
|
|
|
|
{ |
|
336
|
1
|
|
|
|
|
2
|
my %war; |
|
337
|
1
|
|
|
|
|
2
|
$war{'name'} = $k; |
|
338
|
1
|
|
|
|
|
3
|
$war{'conflicts'} = []; |
|
339
|
1
|
|
|
|
|
2
|
foreach my $w ( @{$grouped_wars{$k}}) |
|
|
1
|
|
|
|
|
2
|
|
|
340
|
|
|
|
|
|
|
{ |
|
341
|
1
|
|
|
|
|
2
|
my %subwar; |
|
342
|
1
|
|
|
|
|
3
|
$subwar{'node1'} = $w->node1; |
|
343
|
1
|
|
|
|
|
3
|
$subwar{'node2'} = $w->node2; |
|
344
|
1
|
|
|
|
|
4
|
my $nation1 = $self->get_nation($w->node1); |
|
345
|
1
|
|
|
|
|
21
|
my $nation2 = $self->get_nation($w->node2); |
|
346
|
1
|
|
|
|
|
5
|
$subwar{'army1'} = $nation1->army; |
|
347
|
1
|
|
|
|
|
5
|
$subwar{'army2'} = $nation2->army; |
|
348
|
1
|
|
|
|
|
3
|
$subwar{'node1_faction'} = $w->node1_faction; |
|
349
|
1
|
|
|
|
|
4
|
$subwar{'node2_faction'} = $w->node2_faction; |
|
350
|
1
|
|
|
|
|
2
|
push @{$war{'conflicts'}}, \%subwar; |
|
|
1
|
|
|
|
|
3
|
|
|
351
|
|
|
|
|
|
|
} |
|
352
|
1
|
|
|
|
|
3
|
push @wars, \%war; |
|
353
|
|
|
|
|
|
|
} |
|
354
|
1
|
|
|
|
|
4
|
return @wars; |
|
355
|
|
|
|
|
|
|
} |
|
356
|
|
|
|
|
|
|
|
|
357
|
|
|
|
|
|
|
sub armies_on_territory |
|
358
|
|
|
|
|
|
|
{ |
|
359
|
0
|
|
|
0
|
0
|
0
|
my $self = shift; |
|
360
|
0
|
|
|
|
|
0
|
my $nation = shift; |
|
361
|
0
|
|
|
|
|
0
|
my @conflicts = $self->get_attackers($nation); |
|
362
|
0
|
|
|
|
|
0
|
my @attackers = (); |
|
363
|
0
|
|
|
|
|
0
|
for(@conflicts) |
|
364
|
|
|
|
|
|
|
{ |
|
365
|
0
|
|
|
|
|
0
|
push @attackers, $_->node1; |
|
366
|
|
|
|
|
|
|
} |
|
367
|
0
|
|
|
|
|
0
|
my $supporter; |
|
368
|
0
|
|
|
|
|
0
|
my $supps = $self->supported($nation); |
|
369
|
0
|
0
|
|
|
|
0
|
if($supps) |
|
370
|
|
|
|
|
|
|
{ |
|
371
|
0
|
|
|
|
|
0
|
$supporter = $supps->start($nation); |
|
372
|
|
|
|
|
|
|
} |
|
373
|
0
|
|
|
|
|
0
|
return { invaders => \@attackers, |
|
374
|
|
|
|
|
|
|
supporter => $supporter, |
|
375
|
|
|
|
|
|
|
} |
|
376
|
|
|
|
|
|
|
} |
|
377
|
|
|
|
|
|
|
|
|
378
|
|
|
|
|
|
|
sub print_wars |
|
379
|
|
|
|
|
|
|
{ |
|
380
|
1
|
|
|
1
|
0
|
2
|
my $self = shift; |
|
381
|
1
|
|
|
|
|
2
|
my $nation = shift; |
|
382
|
1
|
|
50
|
|
|
7
|
my $mode = shift || 'print'; |
|
383
|
1
|
|
|
|
|
13
|
my @wars = $self->wars_info(); |
|
384
|
1
|
|
|
|
|
1
|
my @civil_wars; |
|
385
|
1
|
|
|
|
|
2
|
foreach my $n (@{$self->nation_names}) |
|
|
1
|
|
|
|
|
3
|
|
|
386
|
|
|
|
|
|
|
{ |
|
387
|
5
|
50
|
|
|
|
10
|
if($self->at_civil_war($n)) |
|
388
|
|
|
|
|
|
|
{ |
|
389
|
0
|
|
|
|
|
0
|
push @civil_wars, $n; |
|
390
|
|
|
|
|
|
|
} |
|
391
|
|
|
|
|
|
|
} |
|
392
|
1
|
|
|
|
|
10
|
return BalanceOfPower::Printer::print($mode, $self, 'print_wars', |
|
393
|
|
|
|
|
|
|
{ wars => \@wars, |
|
394
|
|
|
|
|
|
|
civil_wars => \@civil_wars } ); |
|
395
|
|
|
|
|
|
|
} |
|
396
|
|
|
|
|
|
|
1; |