Mercurial > eagle-eye
diff inactive-map.pl @ 31:e992576ac97c
inactive user locator
author | "Rex Tsai <chihchun@kalug.linux.org.tw>" |
---|---|
date | Fri, 10 Oct 2008 07:00:52 +0800 |
parents | |
children | da0dd597401c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inactive-map.pl Fri Oct 10 07:00:52 2008 +0800 @@ -0,0 +1,118 @@ +#!/usr/bin/perl +use strict; +use Ikariam; +use Data::Dumper; +use List::Util qw[min max]; + +package main; + +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 cities.status == 'i' + AND user.trader_score_secondary >= 50000 + AND user.army_score_main <= 40 + } +); + +listSheeps(Ikariam::User->search_sheeps()); + +sub listSheeps +{ + my @sheeps = @_; + my %results; + + my $s; + my %maps; + + my $x1 = 99; + my $x2 = 0; + my $y1 = 99; + my $y2 = 0; + foreach my $sheep (sort (@sheeps)) { + # avoid duplicate + next if($sheep->id == $s); $s = $sheep->id; + + foreach my $c ($sheep->cities) { + my $line = ""; + + 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); + + $maps{$island->x}{$island->y}{'id'} = $island->id; + $maps{$island->x}{$island->y}{'density'} += 1; + + $x1 = min ($x1, $island->x); + $x2 = max ($x2, $island->x); + $y1 = min ($y1, $island->y); + $y2 = max ($y2, $island->y); + } + } + + open(OUT, ">map.html") or die $!; + printf(OUT "<html><head><style type=\"text/css\"> + body {color: #FFFFFF; } + a {color: #000000; } + table { + border-width: 0px 0px 0px 0px; + border-spacing: 0px; + border-style: inset inset inset inset; + border-color: gray gray gray gray; + border-collapse: collapse; + background-color: white; + } + </style></head><body><table border=1>"); + + foreach my $x ($x1..$x2) + { + print(OUT "<tr>"); + foreach my $y($y1..$y2) + { + # printf("<div stlye='float:left; background-color: black; padding: 0; Display:inline;'>o</div>"); + if(defined($maps{$x}{$y}{'density'})) { + my $c = 255 - (15 * $maps{$x}{$y}{'density'}); + printf(OUT "<td style=\"background-color: rgb(255,%d,%d);\"><a href=\"http://s2.ikariam.tw/index.php?view=island&id=%d\" title=\"[%d,%d] (%d)\">[%d,%d]</a></td>", + $c, $c, $maps{$x}{$y}{'id'}, $x, $y, $maps{$x}{$y}{'density'}, $x, $y); + } else { + printf(OUT "<td style=\"background-color: rgb(255,255,255);\">[%d,%d]</td>", $x, $y); + } + } + print(OUT "</tr>"); + } + printf(OUT "</table></body></html>"); + close(OUT); +} + +# find_or_create