Mercurial > eagle-eye
view planner.pl @ 285:c864134ebe3e
refined output format
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Thu, 04 Dec 2008 03:22:24 +0800 |
parents | 8355ec8514f9 |
children | 523ea51126bc |
line wrap: on
line source
#!/usr/bin/perl use Ikariam; use Data::Dumper; use Decision::ParseTree q{ParseTree}; use YAML qw/LoadFile Dump DumpFile/; Ikariam::Cities->has_a(island => 'Ikariam::Island'); my $army = { "Slinger" => 301, "Swordsman" => 302, "Phalanx" => 303, "Ram" => 307, "Archer" => 313, "Catapult" => 306, "Gunsman" => 304, "Mortar" => 305, "SteamGiant" => 308, "Gyrocopter" => 312, "Bombardier" => 309, "Doctor" => 311, "Cook" => 310, }; my $fleet = { "CargoShip" => 201, "Ram-Ship" => 210, "BallistaShip" => 213, "Flamethrower" => 211, "CatapultShip" => 214, "MortarShip" => 215, "PaddleWheel Ram" => 216, "DivingBoat" => 212, }; # return minutes. sub travelTime { my ($x1, $y1, $x2, $y2, $speed) = @_; $speed = 20 unless(defined($speed)); return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))+1) * (400/$speed)); } package main; if($#ARGV < 2) { die("Usage: %s targetCity navyCity armyCity wingman1.. wingman2..\n"); } my $targetCityId = shift(@ARGV); my $navyCity = shift(@ARGV); my $armyCity = shift(@ARGV); my @wingman = @ARGV; my $targetCity = Ikariam::Cities->retrieve($targetCityId); # NAVY my $city = LoadFile(sprintf("city-%s-dump.yaml", $navyCity)); $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 8) + 45; $city->{type} = "navy"; push (@cities, $city); # ARMY my $city = LoadFile(sprintf("city-%s-dump.yaml", $armyCity)); $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20) + 5; $city->{type} = "army"; push (@cities, $city); # wingman, army foreach my $cityId (@wingman) { my $city = LoadFile(sprintf("city-%s-dump.yaml", $cityId)); $city->{distance} = travelTime($targetCity->island->x, $targetCity->island->y, $city->{island}->{x}, $city->{island}->{y}, 20); push (@cities, $city); } @cities = sort { $a->{distance} <=> $b->{distance}; } (@cities); # print the code. print <<EOF; #!/usr/bin/perl use strict; use Ikariam; use Data::Dumper; package main; my \$ikariam = new Ikariam(\$::server, \$::user, \$::pass); EOF printf ("# %s %s [%s:%s]\n", $targetCity->owner, $targetCity->cityname, $targetCity->island->x, $targetCity->island->y); printf ("# http://%s/index.php?view=island&id=%d&selectCity=%d\n", $::server, $targetCity->island->id, $targetCity->id); for(my $i = ($#cities + 1) ; $i-- ; $i < 0 ) { if($i ne $#cities) { # TODO, 計算港口速度 # 減掉 cities[$i+1]->buliding->port 的速度 printf("sleep(%d*60);\n", ($cities[$i+1]->{distance} - $cities[$i]->{distance})); } printf("\n# %s %s %dm\n", $cities[$i]->{name}, $cities[$i]->{type}, $cities[$i]->{distance}); printf("# ActionPoint %d/%d\n", $cities[$i]->{actionPoints}, $cities[$i]->{maxActionPoints}); printf('$ikariam->login;' . "\n"); if($cities[$i]->{type} eq "navy") { printf('$ikariam->changeCity(%d);' . "\n", $cities[$i]->{id}); printf('$ikariam->blockadeCity(%d, {' . "\n", $targetCity->id); printf("\tblockadeDuration => 2*60*60," . "\n"); while (my ($k, $v) = each(%{$cities[$i]->{fleet}})) { if($v > 0) { printf("\tcargo_fleet_%s => %s, # %s \n", $fleet->{$k}, $v, $k); } } printf('});' . "\n", $cities[$i]->{id}); } else { printf('$ikariam->changeCity(%d);' . "\n", $cities[$i]->{id}); printf('$ikariam->plunderCity(%d, {' . "\n", $targetCity->id); while (my ($k, $v) = each(%{$cities[$i]->{army}})) { if($v > 0) { printf("\tcargo_army_%s => %s, # %s \n", $army->{$k}, $v, $k); } } printf('});' . "\n", $cities[$i]->{id}); } printf('$ikariam->logout;' . "\n"); }