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