annotate planner.pl @ 308:f6f56a47f383

implemented is_tavern_enough
author "Rex Tsai <chihchun@kalug.linux.org.tw>"
date Sun, 04 Jan 2009 23:49:41 +0800
parents 50cff2eee239
children 2972852a4ee5
rev   line source
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
1 #!/usr/bin/perl
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
2 use Ikariam;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
3 use Data::Dumper;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
4 use Decision::ParseTree q{ParseTree};
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
5 use YAML qw/LoadFile Dump DumpFile/;
301
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
6 use Getopt::Std;
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
7
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
8 Ikariam::Cities->has_a(island => 'Ikariam::Island');
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
9
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
10 my $army = {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
11 "Slinger" => 301,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
12 "Swordsman" => 302,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
13 "Phalanx" => 303,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
14 "Ram" => 307,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
15 "Archer" => 313,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
16 "Catapult" => 306,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
17 "Gunsman" => 304,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
18 "Mortar" => 305,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
19 "SteamGiant" => 308,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
20 "Gyrocopter" => 312,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
21 "Bombardier" => 309,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
22 "Doctor" => 311,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
23 "Cook" => 310,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
24 };
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
25
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
26 my $fleet = {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
27 "CargoShip" => 201,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
28 "Ram-Ship" => 210,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
29 "BallistaShip" => 213,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
30 "Flamethrower" => 211,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
31 "CatapultShip" => 214,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
32 "MortarShip" => 215,
303
50cff2eee239 fixed a typo
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 301
diff changeset
33 "PaddleWheelRam" => 216,
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
34 "DivingBoat" => 212,
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
35 };
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
36
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
37 # return minutes.
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
38 sub travelTime {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
39 my ($x1, $y1, $x2, $y2, $speed) = @_;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
40 $speed = 20 unless(defined($speed));
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
41 return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))+1) * (400/$speed));
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
42 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
43
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
44 package main;
301
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
45 getopts('w');
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
46 if($#ARGV < 2) {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
47 die("Usage: %s targetCity navyCity armyCity wingman1.. wingman2..\n");
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
48 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
49 my $targetCityId = shift(@ARGV);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
50 my $navyCity = shift(@ARGV);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
51 my $armyCity = shift(@ARGV);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
52 my @wingman = @ARGV;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
53
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
54 my $targetCity = Ikariam::Cities->retrieve($targetCityId);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
55
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
56
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
57 # NAVY
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
58 my $city = LoadFile(sprintf("city-%s-dump.yaml", $navyCity));
293
523ea51126bc we leave navy for only 2 round of fights
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 285
diff changeset
59 # $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 8) + 45;
523ea51126bc we leave navy for only 2 round of fights
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 285
diff changeset
60 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 8) + 25;
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
61 $city->{type} = "navy";
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
62 push (@cities, $city);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
63
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
64 # ARMY
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
65 my $city = LoadFile(sprintf("city-%s-dump.yaml", $armyCity));
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
66 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20) + 5;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
67 $city->{type} = "army";
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
68 push (@cities, $city);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
69
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
70 # wingman, army
301
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
71 foreach my $i (0..$#wingman) {
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
72 my $cityId = $wingman[$i];
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
73 my $city = LoadFile(sprintf("city-%s-dump.yaml", $cityId));
301
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
74 if(defined($opt_w)) {
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
75 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20) - ($i * 20 + 20);
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
76 } else {
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
77 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20);
07f51bb67e56 option for wave attack
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 293
diff changeset
78 }
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
79 push (@cities, $city);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
80 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
81
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
82 @cities = sort { $a->{distance} <=> $b->{distance}; } (@cities);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
83
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
84
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
85 # print the code.
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
86 print <<EOF;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
87 #!/usr/bin/perl
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
88 use strict;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
89 use Ikariam;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
90 use Data::Dumper;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
91 package main;
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
92 my \$ikariam = new Ikariam(\$::server, \$::user, \$::pass);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
93 EOF
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
94
276
8355ec8514f9 refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 271
diff changeset
95 printf ("# %s %s [%s:%s]\n", $targetCity->owner, $targetCity->cityname, $targetCity->island->x, $targetCity->island->y);
8355ec8514f9 refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 271
diff changeset
96 printf ("# http://%s/index.php?view=island&id=%d&selectCity=%d\n", $::server, $targetCity->island->id, $targetCity->id);
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
97
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
98 for(my $i = ($#cities + 1) ; $i-- ; $i < 0 ) {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
99
276
8355ec8514f9 refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 271
diff changeset
100 if($i ne $#cities) {
8355ec8514f9 refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 271
diff changeset
101 # TODO, 計算港口速度
8355ec8514f9 refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 271
diff changeset
102 # 減掉 cities[$i+1]->buliding->port 的速度
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
103 printf("sleep(%d*60);\n",
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
104 ($cities[$i+1]->{distance} - $cities[$i]->{distance}));
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
105 }
276
8355ec8514f9 refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 271
diff changeset
106 printf("\n# %s %s %dm\n", $cities[$i]->{name}, $cities[$i]->{type}, $cities[$i]->{distance});
285
c864134ebe3e refined output format
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 276
diff changeset
107 printf("# ActionPoint %d/%d\n", $cities[$i]->{actionPoints}, $cities[$i]->{maxActionPoints});
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
108
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
109 printf('$ikariam->login;' . "\n");
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
110 if($cities[$i]->{type} eq "navy") {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
111 printf('$ikariam->changeCity(%d);' . "\n", $cities[$i]->{id});
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
112 printf('$ikariam->blockadeCity(%d, {' . "\n", $targetCity->id);
285
c864134ebe3e refined output format
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 276
diff changeset
113 printf("\tblockadeDuration => 2*60*60," . "\n");
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
114 while (my ($k, $v) = each(%{$cities[$i]->{fleet}})) {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
115 if($v > 0) {
285
c864134ebe3e refined output format
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 276
diff changeset
116 printf("\tcargo_fleet_%s => %s, # %s \n", $fleet->{$k}, $v, $k);
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
117 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
118 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
119 printf('});' . "\n", $cities[$i]->{id});
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
120 } else {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
121 printf('$ikariam->changeCity(%d);' . "\n", $cities[$i]->{id});
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
122 printf('$ikariam->plunderCity(%d, {' . "\n", $targetCity->id);
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
123 while (my ($k, $v) = each(%{$cities[$i]->{army}})) {
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
124 if($v > 0) {
285
c864134ebe3e refined output format
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents: 276
diff changeset
125 printf("\tcargo_army_%s => %s, # %s \n", $army->{$k}, $v, $k);
271
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
126 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
127 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
128 printf('});' . "\n", $cities[$i]->{id});
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
129 }
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
130 printf('$ikariam->logout;' . "\n");
0ed1b3e72e65 new campaign planner
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
diff changeset
131 }