view inactive-map.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 da0dd597401c
children
line wrap: on
line source

#!/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 < 1000);

            $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 $y($y1..$y2)
    {
        print(OUT "<tr>");
        foreach my $x ($x1..$x2)
        {
            # 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://%s/index.php?view=island&id=%d\" title=\"[%d,%d] (%d)\">[%d,%d]</a></td>",
                    $c, $c, $::server, $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