view enemy.pl @ 272:3730817e3079

show travel time from my cities to enemy's cities
author "Rex Tsai <chihchun@kalug.linux.org.tw>"
date Mon, 01 Dec 2008 14:15:01 +0800
parents 5f9bb3042d0c
children f81c4f9d267f
line wrap: on
line source

#!/usr/bin/perl
use strict;
use Ikariam;
use Data::Dumper;
use YAML qw/LoadFile/;

package main;
my @tradegoodText = qw/NULL 葡萄酒 大理石 水晶 硫磺/;
my @wonderText = qw/NULL 赫菲斯拓斯的熔爐 蓋亞的神殿 狄奧尼索斯的花園 雅典娜的神殿 赫秘士的神殿 阿瑞斯的要塞 波賽頓的神殿 克羅瑟斯的神殿/;

Ikariam::User->has_many(cities => 'Ikariam::Cities');

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));
}

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),
                  );
        }
    }
}

package main;

if($#ARGV != 0) {
    die("Usage: $0 nickname\n");
}

my ($u) = Ikariam::User->search('name' => $ARGV[0]);
if(defined($u)) {
    foreach my $i (qw/name score trader_score_secondary army_score_main ally/) {
        printf("%s: %s\n", $i, $u->get($i));
    }
    printf("\nCities\n");
    foreach my $city ($u->cities) {
        my $island = Ikariam::Island->retrieve($city->island);
        my $capture = $city->citylevel * ($city->citylevel - 1) * $u->trader_score_secondary / 10000;

        printf("Name: %s\n", $city->cityname);
        if(defined($city->status)) {
            printf("Status: <<<%s>>>\n", $city->status);
        }
        printf("Level: %s\n", $city->citylevel);
        printf("Island: %s\n", $island->name);
        printf("Location: [%s:%s] http://%s/index.php?view=island&id=%s&selectCity=%d\n", 
            $island->x, $island->y, $::server, $island->id, $city->cityId);
        printf("Tradegood: %s\n", $tradegoodText[$island->tradegood]);
        printf("Wonder: %s\n", $wonderText[$island->wonder]);
        printf("Capture: %d\n", $capture);
        myTownToVicim($island->id);
        printf("\n");
    }
    print "-"x80 . "\n";
}