Mercurial > eagle-eye
diff attacker_travel.pl @ 352:bf59bef30dfc
scripts for counting travel time
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Sun, 15 Feb 2009 14:19:47 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/attacker_travel.pl Sun Feb 15 14:19:47 2009 +0800 @@ -0,0 +1,143 @@ +#!/usr/bin/perl +use strict; + +use Data::Dumper; +use Ikariam; +use YAML qw/LoadFile/; +# return minutes. +sub travelTime { + my ($x1, $y1, $x2, $y2, $speed) = @_; + $speed = 60 unless(defined($speed)); + if($x1 == $x2 && $y1 == $y2) { + return 600/$speed; + } else { + return int( (sqrt((abs($x1 - $x2) * abs($x1 - $x2)) + (abs($y1 - $y2) * abs($y1 - $y2)))) * (1200/$speed)); + } +} + +Ikariam::User->has_many(cities => 'Ikariam::Cities'); +Ikariam::Cities->has_a(island => 'Ikariam::Island'); +Ikariam::Cities->set_sql(ally => qq { + SELECT cities.cityid + FROM cities + WHERE cities.ally = ? + }); + + +sub allyTownToVicim { + my $islandId = shift; + + my $mime = Ikariam::User->retrieve(name => $::user); + my $ally = $mime->ally; + my $iterator = Ikariam::Cities->search_ally($mime->ally); + if(my $island = Ikariam::Island->retrieve($islandId)) { + + my @cities = (); + while(my $target = $iterator->next) { + my $city; + $city->{id} = $target->id; + $city->{name} = $target->cityname; + $city->{owner} = $target->owner; + $city->{island}->{id} = $target->island->id; + $city->{island}->{x} = $target->island->x; + $city->{island}->{y} = $target->island->y; + $city->{distance} = + travelTime($target->island->x, $target->island->y, $island->x, $island->y) ; + + push (@cities, $city); + } + + @cities = sort { $a->{distance} <=> $b->{distance}; } (@cities); + + for my $x (0..$#cities) { + printf("%s (%s)\t- ", $cities[$x]->{name}, $cities[$x]->{owner}); + printf("Land %3d Ship %3d Catapult %3d Ram %3d\n", + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 60), + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 33), + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 26), + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 40), + ); +# last if($x > 5); + } + } +} + +sub myTownToVicim { + my $islandId = shift; + + my @cities = (); + foreach (glob("city-*-dump.yaml")) { + my $city = LoadFile($_); + push (@cities, $city); + } + my $n = $#cities; + + + if(my $island = Ikariam::Island->retrieve($islandId)) { + + for my $x (0..$n) { + printf("%s\t- ", $cities[$x]->{name}); + printf("Land %3d Ship %3d Catapult %3d Ram %3d\n", + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y), + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 8), + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 6), + travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $island->x, $island->y, 10), + ); + } + } +} + +sub cityToIsland { + my (@city, $island); +} + +package main; + +my $userName = $ARGV[0]; +my @cities = (); +if(my $user = Ikariam::User->retrieve(name => $userName)) { + foreach my $target ($user->cities) { + my $island = $target->island; + my $city; + $city->{id} = $target->id; + $city->{name} = $target->cityname; + $city->{island}->{id} = $island->id; + $city->{island}->{x} = $island->x; + $city->{island}->{y} = $island->y; + + push (@cities, $city); + } +} + +my $n = $#cities; + +# Print them out. +# header +printf(" %5s ", undef); +for my $y (0..$n) { + printf ("%5s ", $cities[$y]->{id}); +} +print "\n"; + +# body +for my $x (0..$n) { + printf(" %5s ", $cities[$x]->{id}); + my $total = 0; + for my $y (0..$n) { + my $t = travelTime($cities[$x]->{island}->{x}, $cities[$x]->{island}->{y}, $cities[$y]->{island}->{x}, $cities[$y]->{island}->{y}); + printf("%5s ", $t); + $total += $t; + } + printf(" %s", $cities[$x]->{name}); + printf("\n"); +} +printf("\n"); + + +for my $i (0..$n) { + printf("To: %s [%d:%d] http://%s/index.php?view=island&cityId=%s\n", $cities[$i]->{name}, $cities[$i]->{island}->{x}, $cities[$i]->{island}->{y}, $::server, $cities[$i]->{id}); +# myTownToVicim($cities[$i]->{island}->{id}); +# printf("\n"); + allyTownToVicim($cities[$i]->{island}->{id}); + printf("\n"); +}