Mercurial > eagle-eye
view sheep.pl @ 37:7d1e353520ca
just return empty users list, when the score link table is missed.
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Thu, 16 Oct 2008 21:40:14 +0800 |
parents | d183277b4d93 |
children | 5849b6fdc76c |
line wrap: on
line source
#!/usr/bin/perl use strict; use Ikariam; use Data::Dumper; package main; my @tradegoodText = qw/NULL 葡萄酒 大理石 水晶 硫磺/; Ikariam::User->has_many(cities => 'Ikariam::Cities'); Ikariam::User->set_sql(inactivity => qq { SELECT user.id FROM user, cities, island WHERE user.id == cities.user AND cities.island == island.id AND island.x <= ? AND island.x >= ? AND island.y <= ? AND island.y >= ? AND cities.status = 'i' } ); #Ikariam::User->set_sql(sheeps => qq { # SELECT user.id # FROM user, cities, island # WHERE user.id == cities.user # AND cities.island == island.id # AND island.x <= ? # AND island.x >= ? # AND island.y <= ? # AND island.y >= ? # AND user.trader_score_secondary >= 50000 # AND user.army_score_main <= 100 # } #); Ikariam::User->set_sql(sheeps => qq { SELECT user.id FROM user, cities WHERE user.id == cities.user AND user.trader_score_secondary >= 50000 AND user.army_score_main <= 40 AND cities.island IN (SELECT island.id FROM island WHERE island.x <= ? AND island.x >= ? AND island.y <= ? AND island.y >= ? ) } ); if($#ARGV != 1) { die("Usage: $0 x y\n"); } my ($x, $y) = @ARGV; listSheeps(Ikariam::User->search_sheeps(($x + 6), ($x - 6), ($y + 6), ($y - 6))); # listSheeps(Ikariam::User->search_inactivity(($x + 6), ($x - 6), ($y + 6), ($y - 6))); sub listSheeps { my @sheeps = @_; my %results; my $s; foreach my $sheep (sort (@sheeps)) { # avoid duplicate next if($sheep->id == $s); $s = $sheep->id; # 查聯盟數量 my $members = 1; unless ($sheep->allyId == '0') { $members = Ikariam::User->search(allyId => $sheep->allyId)->count(); } foreach my $c ($sheep->cities) { my $line = ""; # Ignore 假期模式 next if($c->status eq 'v'); unless($c->status eq 'i') { next if($members > 3); } my $island = Ikariam::Island->retrieve($c->island); # 所得金錢 = 對方城鎮等級x(對方城鎮等級-1)x對方金錢/10000 my $robbery = $c->citylevel * ($c->citylevel - 1) * $sheep->trader_score_secondary / 10000; next if($robbery < 2000); $line = sprintf("%d %s army %d %s/%s(%d),", $robbery, $c->status, $sheep->army_score_main, $sheep->name, $sheep->ally, $members); $line .= sprintf("\"%s\" %d [%d,%d] %s http://s2.ikariam.tw/index.php?view=island&id=%d&selectCity=%d\n", $c->cityname, $c->citylevel, $island->x, $island->y, $tradegoodText[$island->tradegood], $island->id, $c->cityId ); printf("%s", $line); } } } # find_or_create