X-Git-Url: https://ruin.nu/git/?p=NDIRC.git;a=blobdiff_plain;f=Commands%2FDef.pm;h=321697871bc4113e2cb2fd5ea0b45bac829c4295;hp=e13758d4797964e6bdd0d8293c8f101c1a0717b8;hb=4c40fd39668614135ae9370092b5d17355bad15c;hpb=97961925ba4f37fb6f63e3d914241d6d4d8d84a2 diff --git a/Commands/Def.pm b/Commands/Def.pm index e13758d..3216978 100644 --- a/Commands/Def.pm +++ b/Commands/Def.pm @@ -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 $id: $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} = "$user->{defprio}"; + $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, "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]"); + }else{ + $c->message(privmsg => $ND::defchan, "Do not cover, 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, "Call is likely not covered anymore, please recalc! calc: $call[3]"); + } + }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, "THIS IS A POSSIBLE FLEETCATCH!"); + } + } + $dbh->commit; + }else{ + $c->message(privmsg => $ND::defchan, "Didn't find any planet with coordinates $4:$5:$6 at this tick"); + } + }else{ + $c->message(privmsg => $ND::defchan, "No member registered with coordinates $1:$2:$3"); + } + } + +} 1;