From 9993c9362b6601921cedb341e18399da3b4af0f1 Mon Sep 17 00:00:00 2001 From: Michael Andreen Date: Wed, 5 Sep 2007 07:52:34 +0200 Subject: [PATCH] findCovOpper function implemented --- PA.pm | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/PA.pm b/PA.pm index 6319f17..1b8f239 100644 --- a/PA.pm +++ b/PA.pm @@ -28,7 +28,7 @@ require Exporter; our @ISA = qw/Exporter/; -our @EXPORT = qw/checkPlanet checkGal shipEff shipStop parseValue prettyValue calcXp/; +our @EXPORT = qw/checkPlanet checkGal shipEff shipStop parseValue prettyValue calcXp findCovOpper/; sub checkPlanet { my ($msg) = @_; @@ -214,44 +214,60 @@ sub calcXp { } $tsize -= $roids; unless (defined $avalue && defined $ascore){ - $ND::server->command("notice $ND::target You don't have a planet specified"); + $ND::server->command("notice $ND::nick You don't have a planet specified"); return; } unless (defined $tvalue && defined $tscore){ - $ND::server->command("notice $ND::target Doesn't seem to be a planet at $x:$y:$z"); + $ND::server->command("notice $ND::nick Doesn't seem to be a planet at $x:$y:$z"); return; } my $xp = pa_xp($roids,$ascore,$avalue,$tscore,$tvalue); my $score = 60 * $xp; my $value = $roids*200; my $totscore = prettyValue($score + $value); - $ND::server->command("notice $ND::target You will gain $ND::B$xp$ND::B XP, $ND::B$score$ND::B score, if you steal $roids roids ($ND::B$value$ND::B value), from $ND::B$x:$y:$z$ND::B, who will have $ND::B$tsize$ND::B roids left, total score gain will be: $ND::B$totscore$ND::B in total,"); + $ND::server->command("notice $ND::nick You will gain $ND::B$xp$ND::B XP, $ND::B$score$ND::B score, if you steal $roids roids ($ND::B$value$ND::B value), from $ND::B$x:$y:$z$ND::B, who will have $ND::B$tsize$ND::B roids left, total score gain will be: $ND::B$totscore$ND::B in total,"); } sub findCovOpper { - my ($stolen) = @_; + my ($stolen, $command) = @_; my $tick = $ND::tick; my $agents; - if ($stolen =~ /(\d+) (\d+) (\d+)/){ + if (defined $stolen && $stolen =~ /(\d+) (\d+) (\d+)/){ $tick = $1; $agents = $2; $stolen = $3; - }elsif ($stolen =~ /(\d+) (\d+)/){ - $tick = $1; - $stolen = $3; + }elsif (defined $stolen && $stolen =~ /(\d+) (\d+)/){ + $agents = $1; + $stolen = $2; + }else{ + $ND::server->command("notice $ND::nick syntax: .$command [tick] agents stolen | tick can be omitted if you're doing this the same tick you got cov opped, if you have different amount of your resources stolen, specify the highest amount. Only works if less than 10% of your resources and < 10,000*agents were stolen"); + return; } my ($value,$score) = $ND::DBH->selectrow_array(q{ SELECT value,score FROM planet_stats WHERE id = (SELECT planet FROM users WHERE hostmask ILIKE ?) AND tick = ?; }, undef, $ND::address,$tick); - my ($coords) = $ND::DBH->selectrow_array(q{ - SELECT coords(p.x,p.y,p.z) FROM current_planet_stats p JOIN planet_stats ps using (id) WHERE - ps.tick = ? AND (2000*?*?/ps.value)::int = $stolen ; - }, undef, $tick,$agents,$value,$stolen); - $ND::server->command("notice $ND::target The planet that cov opped you is: $coords"); + unless ($value){ + $ND::server->command("notice $ND::nick No value found for tick $tick, can't find your cov opper."); + return; + } + my $attackers = $ND::DBH->prepare(q{ + SELECT coords(p.x,p.y,p.z), ruler, planet FROM current_planet_stats p JOIN planet_stats ps using (id) WHERE + ps.tick = $1 AND (2000*$2*$3/ps.value)::int = $4 ; + }); + $attackers->execute($tick,$agents,$value,$stolen); + if ($attackers->rows == 0){ + $ND::server->command("notice $ND::nick No cov opper found, did you specify the right tick, and was the stolen amount not capped?"); + return; + } + my $coords = ''; + while (my $attacker = $attackers->fetchrow_hashref){ + $coords .= " ($attacker->{coords} : $attacker->{ruler} OF $attacker->{planet})"; + } + $ND::server->command("notice $ND::nick The planet that cov opped you is one of: $coords"); } 1; -- 2.39.2