X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Commands%2FScans.pm;fp=Commands%2FScans.pm;h=2cb0c3c12c3db8ab85e55020501cbc1bb5ccaaf5;hb=491db8f0abea3c779a1ecdc64f22ed233bc9546b;hp=0000000000000000000000000000000000000000;hpb=bbda5c4f4358094b8599e814484d837dc3ee7d86;p=NDIRC.git diff --git a/Commands/Scans.pm b/Commands/Scans.pm new file mode 100644 index 0000000..2cb0c3c --- /dev/null +++ b/Commands/Scans.pm @@ -0,0 +1,94 @@ +#************************************************************************** +# Copyright (C) 2008 by Michael Andreen * +# * +# This program is free software; you can redistribute it and/or modify * +# it under the terms of the GNU General Public License as published by * +# the Free Software Foundation; either version 2 of the License, or * +# (at your option) any later version. * +# * +# This program is distributed in the hope that it will be useful, * +# but WITHOUT ANY WARRANTY; without even the implied warranty of * +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# GNU General Public License for more details. * +# * +# You should have received a copy of the GNU General Public License * +# along with this program; if not, write to the * +# Free Software Foundation, Inc., * +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * +#**************************************************************************/ + +package NDIRC::Commands::Scans; + +use strict; +use warnings; +use feature ':5.10'; + +use Moose; +use MooseX::MethodAttributes; + +my %scanid = (p => 1, l => 2, d => 3, u => 4, n => 5, j => 7, a => 8); + +my @scantypes = ('Planet','Landing', 'Development' + ,'Unit', 'News', 'Incoming', 'Jumpgate', 'Advanced Unit'); + +sub gs + : Help(syntax: gs type X:Y:Z message | type is the first character in the scan name, like p for planet scan, message is a message to scanners, like plz or thanks like plz or thanks) + : ACL(irc_gs) + : Type(pm) +{ + my ($self,$c,$args) = @_; + + my ($typeid, $x, $y, $z, $msg) = $args =~ /^([pdunja]) (\d+)\D+(\d+)\D+(\d+) (\S.*)/ + or die 'ARGS'; + $typeid = $scanid{$typeid}; + my $type = $scantypes[$typeid-1]; + + my $planet = $c->model->selectrow_array(q{SELECT planetid($1,$2,$3,tick())} + ,undef,$x,$y,$z); + + my $query = $c->model->prepare(q{SELECT scan_id + FROM scans + WHERE planet = $1 AND type = $2 AND tick >= tick()}); + $query->execute($planet,$type); + + if (my $scan = $query->fetchrow_hashref){ + $c->reply("scan already exist: " + . "http://game.planetarion.com/showscan.pl?scan_id=$scan->{scan_id}"); + }else{ + my $req = $c->model->prepare(q{ +SELECT * FROM scan_requests +WHERE uid = (SELECT uid FROM users WHERE hostmask ILIKE $1) + AND planet = $2 AND type = $3 AND NOT sent + }); + $req->execute($c->host,$planet,$type); + + my $id; + if(my $scan = $req->fetchrow_hashref){ + $req = $c->model->prepare(q{ +UPDATE scan_requests SET nick = $1, tick = tick(), time = NOW() +WHERE id = $2 + }); + $req->execute($c->nick,$scan->{id}); + $id = $scan->{id}; + }else{ + $req = $c->model->prepare(q{ +INSERT INTO scan_requests (uid,nick,planet,type) +VALUES((SELECT uid FROM users WHERE hostmask ILIKE $1),$2,$3,$4) RETURNING (id) + }); + $req->execute($c->host,$c->nick,$planet,$type); + $id = $req->fetchrow; + } + + if ($id){ + $c->message("msg $ND::scanchan" + ,"$id http://game.planetarion.com/waves.pl?id=$typeid&x=$x&y=$y&z=$z" + . " ($x:$y:$z $type) | <".$c->nick."> $msg" + ); + $c->reply("sent request ($x:$y:$z $type)"); + }else{ + $c->reply("something went wrong.."); + } + } +} + +1;