]> ruin.nu Git - NDIRC.git/blobdiff - Commands/Def.pm
Added code for Eos + fix for DCC and Quotes
[NDIRC.git] / Commands / Def.pm
index e13758d4797964e6bdd0d8293c8f101c1a0717b8..321697871bc4113e2cb2fd5ea0b45bac829c4295 100644 (file)
@@ -27,6 +27,7 @@ use CGI;
 
 use Moose;
 use MooseX::MethodAttributes;
+use NDIRC::Misc;
 
 sub anon
        : Help(syntax: .anon nick message)
@@ -224,6 +225,100 @@ SELECT calc FROM calls WHERE id = $1}
        $c->reply("Calc for call <b>$id</b>: $calc");
 }
 
+sub report_incs
+       : Type(pm)
+{
+       my ($self,$c,$msg) = @_;
+
+       if ($msg =~ /(\d+):(\d+):(\d+)\*?\s+(\d+):(\d+):(\d+)\s+([^:]*\S+)\s+(?:Ter|Cat|Xan|Zik|Etd)\s+([\d,]+)\s+Attack\s+(\d+)/
+                       || $msg =~ /(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)\s+\((?:Ter|Cat|Xan|Zik|Etd)\)\s+([^,]*\S+)\s+([\d,]+)\s+(\d+)\s+\(\d+\)/){
+               my $dbh = $c->model;
+               my $amount = $8;
+               {
+                       $amount =~ s/,//g;
+               }
+
+               my $st = $dbh->prepare(q{
+SELECT username, uid, pid, defprio
+FROM users_defprio u
+WHERE pid = planetid($1,$2,$3,tick())
+       AND uid IN (SELECT uid FROM groupmembers WHERE gid = 'M')
+                       });
+               if (my $user = $dbh->selectrow_hashref($st,undef,$1,$2,$3)){
+
+                       $st = $dbh->prepare(q{
+SELECT nick,alliance,pid,planet_status,relationship
+FROM current_planet_stats WHERE x = ? AND y = ? AND z = ?
+                       });
+                       if (my @attacker = $dbh->selectrow_array($st,undef,$4,$5,$6)){
+                               $dbh->begin_work;
+                               my $landing_tick = $dbh->selectrow_array(q{SELECT tick() + ?},undef,$9);
+                               my @call = $dbh->selectrow_array(q{
+SELECT call,status,calc
+FROM calls WHERE uid = ? AND landing_tick = ?
+                               },undef,$user->{uid},$landing_tick);
+                               my $threefleeter = $dbh->selectrow_array(q{
+SELECT COALESCE(gid = 'X',false)
+FROM groupmembers WHERE uid = ? AND gid = 'X'
+                               },undef,$user->{uid});
+                               unless (@call){ #call doesn't exists, create a new one
+                                       @call = $dbh->selectrow_array(q{
+INSERT INTO calls (uid,landing_tick,info) VALUES(?,?,'') RETURNING call
+                                       },undef,$user->{uid},$landing_tick);
+                                       if ($threefleeter){
+                                               $dbh->do(q{UPDATE calls SET status = 'Ignored' WHERE call = $1},undef,$call[0]);
+                                               $c->def_log($call[0], 'This member has been marked as [B]NoDef[/B], do [B]not cover[/B] unless you have a good reaon.');
+                                       }
+                               }
+                               if (@call){
+                                       my $pointlimits = $dbh->prepare(q{SELECT value :: float FROM misc WHERE id = ?});
+                                       my ($minpoints) = $dbh->selectrow_array($pointlimits,undef,'DEFMINPRIO');
+                                       my ($maxpoints) = $dbh->selectrow_array($pointlimits,undef,'DEFMAXPRIO');
+                                       my $color = 3;
+                                       if ($user->{defprio} < $minpoints){
+                                               $color = 5;
+                                       }elsif ($user->{defprio} < $maxpoints){
+                                               $color = 8;
+                                       }
+                                       $user->{defprio} = "<c0$color>$user->{defprio}</c>";
+                                       $st = $dbh->prepare(q{SELECT pid FROM incomings WHERE pid = ? AND amount = ? and fleet = ? AND call = ?});
+                                       unless (my @inc = $dbh->selectrow_array($st,undef,$attacker[2],$amount,$7,$call[0])){
+                                               my $incid = $dbh->selectrow_array(q{
+INSERT INTO incomings (call,pid,eta,amount,fleet) VALUES(?,?,?,?,?) RETURNING inc
+                                               },undef,$call[0],$attacker[2],$9,$amount,$7);
+                                               @attacker = map (valuecolor(0),@attacker);
+                                               if (! $threefleeter || $call[2]){
+                                                       $c->message(privmsg => $ND::defchan, "<b>New incoming: CallId: $call[0], IncId: $incid $1:$2:$3 ($user->{defprio}) is under Attack by $4:$5:$6, ($attacker[3]), $attacker[1]($attacker[4]) https://nd.ruin.nu/calls/edit/$call[0]</b>");
+                                               }else{
+                                                       $c->message(privmsg => $ND::defchan, "<b>Do not cover</b>, NoDef member is under attack by $4:$5:$6, ($attacker[3]), $attacker[1]($attacker[4])  https://nd.ruin.nu/calls/edit/$call[0]");
+                                               }
+                                               $dbh->do(q{UPDATE planets SET hit_us = hit_us + 1 WHERE pid = ?},undef,$attacker[2]);
+                                               if ($call[1] eq 'Covered'){
+                                                       $dbh->do(q{UPDATE calls SET status = 'Open' WHERE call = ?},undef,$call[0]);
+                                                       $c->message(privmsg => $ND::defchan, "<b>Call is likely not covered anymore, please recalc! calc: $call[3]</b>");
+                                               }
+                                       }else{
+                                               @attacker = map (valuecolor(0),@attacker);
+                                               $c->message(privmsg => $ND::defchan, "Duplicate call: Callid: $call[0], Covered: $call[1], Open: $call[2] $1:$2:$3 ($user->{defprio}) is under Attack by $4:$5:$6, ($attacker[3]), $attacker[1]($attacker[4]), landing tick: $landing_tick");
+                                       }
+
+                                       my ($fleetcatch) = $dbh->selectrow_array(q{
+SELECT count(*) FROM launch_confirmations WHERE uid = ? AND back = ?
+                                       },undef,$user->{uid},$landing_tick);
+                                       if ($fleetcatch > 0){
+                                               $c->message(privmsg => $ND::defchan, "<c04>THIS IS A POSSIBLE FLEETCATCH!</c>");
+                                       }
+                               }
+                               $dbh->commit;
+                       }else{
+                               $c->message(privmsg => $ND::defchan, "<c04>Didn't find any planet with coordinates $4:$5:$6 at this tick</c>");
+                       }
+               }else{
+                       $c->message(privmsg => $ND::defchan, "<c04>No member registered with coordinates $1:$2:$3</c>");
+               }
+       }
+
+}
 
 1;