Mercurial > eagle-eye
view scan.pl @ 232:978a949602e5
Auto-update Scientists numbers for Academy.
Refined the rules for safehouse, the safe house must be same or higher level then Town Hall.
Make people very happy, when the townHall is less then 16.
Build museum first then tavern
THG: changed warfare.pl
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Thu, 06 Nov 2008 20:31:05 +0800 |
parents | 541bc1fba446 |
children | 1a7b2d42fcbf |
line wrap: on
line source
#!/usr/bin/perl use strict; use Data::Dumper; use Ikariam; package main; sub saveCities { my ($island, @cities) = @_; if ($#cities == -1) { warn ("empty cities list.\n"); return; } foreach my $h_city (@cities) { $h_city->{island} = $island; $h_city->{'time'} = time; my $c = Ikariam::Cities->retrieve($h_city->{cityId}); if(defined($c)) { foreach (keys(%$h_city)) { $c->set($_ => $h_city->{$_}); } } else { $c = Ikariam::Cities->insert($h_city); } $c->update(); my $user = Ikariam::User->retrieve($h_city->{'user'}); next if (defined($user) && defined($user->time) && $user->time le (time - 30*60*1)); saveUser($h_city->{owner}); } } sub saveUser { my $userName = shift; my $users; foreach my $x (qw/score army_score_main trader_score_secondary/) { $users = $::i->viewScore($x, $userName, 0); foreach my $h_user (values(%{$users})) { printf("Saving user %s\n", $h_user->{'name'}); $h_user->{'time'} = time; my $user = Ikariam::User->retrieve($h_user->{'id'}); if(defined($user)) { foreach (keys(%$h_user)) { $user->set($_ => $h_user->{$_}); } } else { $user = Ikariam::User->insert($h_user); } $user->update(); saveAlly($h_user->{allyId}); } } } sub saveAlly { my $allyId = shift; return unless (defined($allyId) && $allyId ne '0'); # Save for member of ally my $ally = Ikariam::Ally->retrieve($allyId); if(!defined($ally) || $ally->time le (time - 30*60*1)) { my $h_ally = $::i->viewAlly($allyId); $h_ally->{'time'} = time; if(defined($ally)) { foreach (keys(%$h_ally)) { $ally->set($_ => $h_ally->{$_}); } } else { $ally = Ikariam::Ally->insert($h_ally); } } } sub saveIslands { my @islands = @_; foreach my $h_island (@islands) { # printf("checking island %d\n", $h_island->{id}); my $island; if($island = Ikariam::Island->retrieve($h_island->{id})) { foreach my $i (keys(%$h_island)) { $island->set($i => $h_island->{$i}); } } else { $island = Ikariam::Island->insert($h_island); } # scanning the island if($island->time le (time - 30*60*6)) { my @cities = $::i->viewIsland($h_island->{id}); saveCities($h_island->{id}, @cities); $island->set('time', time); } $island->update(); } } local $SIG{ALRM} = sub { die "timeout\n" }; alarm 3; our $i = new Ikariam($::server, $::user, $::pass); if($#ARGV == 1) { $i->login; my @islands = $i->viewWorldMap($ARGV[0], $ARGV[1]); saveIslands(@islands); $i->logout; } elsif($#ARGV == 0) { $i->login; my $island = $ARGV[0]; my @cities = $i->viewIsland($island); saveCities($island, @cities); $i->logout; } elsif($#ARGV == -1) { $i->login; my $cities = $i->check; # random foreach my $cityId (keys(%$cities)) { printf("%s %s\n", $cities->{$cityId}->{island}->{x}, $cities->{$cityId}->{island}->{y}); my @islands = $i->viewWorldMap( $cities->{$cityId}->{island}->{x}, $cities->{$cityId}->{island}->{y}); saveIslands(@islands); } $i->logout; } else { die("Usage: $0\nUsage: $0 x y\n"); }