Mercurial > eagle-eye
annotate planner.pl @ 284:10f14db31151
added new dump spy info function
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Thu, 04 Dec 2008 03:22:11 +0800 |
parents | 8355ec8514f9 |
children | c864134ebe3e |
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/; | |
6 | |
7 Ikariam::Cities->has_a(island => 'Ikariam::Island'); | |
8 | |
9 my $army = { | |
10 "Slinger" => 301, | |
11 "Swordsman" => 302, | |
12 "Phalanx" => 303, | |
13 "Ram" => 307, | |
14 "Archer" => 313, | |
15 "Catapult" => 306, | |
16 "Gunsman" => 304, | |
17 "Mortar" => 305, | |
18 "SteamGiant" => 308, | |
19 "Gyrocopter" => 312, | |
20 "Bombardier" => 309, | |
21 "Doctor" => 311, | |
22 "Cook" => 310, | |
23 }; | |
24 | |
25 my $fleet = { | |
26 "CargoShip" => 201, | |
27 "Ram-Ship" => 210, | |
28 "BallistaShip" => 213, | |
29 "Flamethrower" => 211, | |
30 "CatapultShip" => 214, | |
31 "MortarShip" => 215, | |
32 "PaddleWheel Ram" => 216, | |
33 "DivingBoat" => 212, | |
34 }; | |
35 | |
36 # return minutes. | |
37 sub travelTime { | |
38 my ($x1, $y1, $x2, $y2, $speed) = @_; | |
39 $speed = 20 unless(defined($speed)); | |
40 return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))+1) * (400/$speed)); | |
41 } | |
42 | |
43 package main; | |
44 if($#ARGV < 2) { | |
45 die("Usage: %s targetCity navyCity armyCity wingman1.. wingman2..\n"); | |
46 } | |
47 my $targetCityId = shift(@ARGV); | |
48 my $navyCity = shift(@ARGV); | |
49 my $armyCity = shift(@ARGV); | |
50 my @wingman = @ARGV; | |
51 | |
52 my $targetCity = Ikariam::Cities->retrieve($targetCityId); | |
53 | |
54 | |
55 # NAVY | |
56 my $city = LoadFile(sprintf("city-%s-dump.yaml", $navyCity)); | |
57 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 8) + 45; | |
58 $city->{type} = "navy"; | |
59 push (@cities, $city); | |
60 | |
61 # ARMY | |
62 my $city = LoadFile(sprintf("city-%s-dump.yaml", $armyCity)); | |
63 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20) + 5; | |
64 $city->{type} = "army"; | |
65 push (@cities, $city); | |
66 | |
67 # wingman, army | |
68 foreach my $cityId (@wingman) { | |
69 my $city = LoadFile(sprintf("city-%s-dump.yaml", $cityId)); | |
70 $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20); | |
71 push (@cities, $city); | |
72 } | |
73 | |
74 @cities = sort { $a->{distance} <=> $b->{distance}; } (@cities); | |
75 | |
76 | |
77 # print the code. | |
78 print <<EOF; | |
79 #!/usr/bin/perl | |
80 use strict; | |
81 use Ikariam; | |
82 use Data::Dumper; | |
83 package main; | |
84 my \$ikariam = new Ikariam(\$::server, \$::user, \$::pass); | |
85 EOF | |
86 | |
276
8355ec8514f9
refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
271
diff
changeset
|
87 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
|
88 printf ("# http://%s/index.php?view=island&id=%d&selectCity=%d\n", $::server, $targetCity->island->id, $targetCity->id); |
271 | 89 |
90 for(my $i = ($#cities + 1) ; $i-- ; $i < 0 ) { | |
91 | |
276
8355ec8514f9
refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
271
diff
changeset
|
92 if($i ne $#cities) { |
8355ec8514f9
refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
271
diff
changeset
|
93 # TODO, 計算港口速度 |
8355ec8514f9
refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
271
diff
changeset
|
94 # 減掉 cities[$i+1]->buliding->port 的速度 |
271 | 95 printf("sleep(%d*60);\n", |
96 ($cities[$i+1]->{distance} - $cities[$i]->{distance})); | |
97 } | |
276
8355ec8514f9
refined output data
"Rex Tsai <chihchun@kalug.linux.org.tw>"
parents:
271
diff
changeset
|
98 printf("\n# %s %s %dm\n", $cities[$i]->{name}, $cities[$i]->{type}, $cities[$i]->{distance}); |
271 | 99 |
100 printf('$ikariam->login;' . "\n"); | |
101 if($cities[$i]->{type} eq "navy") { | |
102 printf('$ikariam->changeCity(%d);' . "\n", $cities[$i]->{id}); | |
103 printf('$ikariam->blockadeCity(%d, {' . "\n", $targetCity->id); | |
104 printf('blockadeDuration => 8*60*60,' . "\n"); | |
105 while (my ($k, $v) = each(%{$cities[$i]->{fleet}})) { | |
106 if($v > 0) { | |
107 printf("cargo_fleet_%s => %s, # %s \n", $fleet->{$k}, $v, $k); | |
108 } | |
109 } | |
110 printf('});' . "\n", $cities[$i]->{id}); | |
111 } else { | |
112 printf('$ikariam->changeCity(%d);' . "\n", $cities[$i]->{id}); | |
113 printf('$ikariam->plunderCity(%d, {' . "\n", $targetCity->id); | |
114 while (my ($k, $v) = each(%{$cities[$i]->{army}})) { | |
115 if($v > 0) { | |
116 printf("cargo_army_%s => %s, # %s \n", $army->{$k}, $v, $k); | |
117 } | |
118 } | |
119 printf('});' . "\n", $cities[$i]->{id}); | |
120 } | |
121 printf('$ikariam->logout;' . "\n"); | |
122 } |