]> ruin.nu Git - ndwebbie.git/blobdiff - ND/Web/Pages/LaunchConfirmation.pm
better parsing
[ndwebbie.git] / ND / Web / Pages / LaunchConfirmation.pm
index 79ce12fbb2cb6e50d02932abe069eacde3dbbae7..dda401e1102eafdb2785402472467427ede6ba8d 100644 (file)
@@ -47,7 +47,8 @@ sub render_body {
                        JOIN raids r ON t.raid = r.id
                        WHERE c.uid = ? AND r.tick+c.wave-1 = ? AND t.planet = ?
                        AND r.open AND not r.removed});
-               my $finddefensetarget = $DBH->prepare(q{SELECT NULL});
+               my $finddefensetarget = $DBH->prepare(q{SELECT c.id FROM calls c JOIN users u ON c.member = u.uid WHERE u.planet = $1 AND c.landing_tick = $2});
+               my $informDefChannel = $DBH->prepare(q{INSERT INTO defense_missions (fleet,call) VALUES (?,?)});
                my $addattackpoint = $DBH->prepare('UPDATE users SET attack_points = attack_points + 1 WHERE uid = ?');
                my $launchedtarget = $DBH->prepare('UPDATE raid_claims SET launched = True WHERE uid = ? AND target = ? AND wave = ?');
                my $addfleet = $DBH->prepare(qq{INSERT INTO fleets (uid,target,mission,landing_tick,fleet,eta,back) VALUES (?,?,?,?,(SELECT max(fleet)+1 from fleets WHERE uid = ?),?,?)});
@@ -61,8 +62,9 @@ sub render_body {
                }
                my @missions;
                $DBH->begin_work;
-               while ($missions =~ m/\S+\s+(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)\s+\((?:(\d+)\+)?(\d+)\).*?(?:\d+hrs\s+)?\d+mins\s+(Attack|Defend|Return|Fake Attack|Fake Defend)(.*?)(?:Launching in tick (\d+), arrival in tick (\d+)|ETA: \d+, Return ETA: (\d+))/sg){
+               while ($missions =~ m/\S+\s+(\d+):(\d+):(\d+)\s+(\d+):(\d+):(\d+)\s+\((?:(\d+)\+)?(\d+)\).*?(?:\d+hrs\s+)?\d+mins\s+(Attack|Defend|Return|Fake Attack|Fake Defend)(.*?)(?:Launching in tick (\d+), arrival in tick (\d+)|ETA: \d+, Return ETA: (\d+)|Return ETA: (\d+))/sg){
                        my %mission;
+                       next if $9 eq 'Return';
 
                        my $tick = $self->{TICK}+$8;
                        $tick += $7 if defined $7;
@@ -85,14 +87,26 @@ sub render_body {
                        my $findtarget = $finddefensetarget;
                        if ($mission eq 'Attack'){
                                $findtarget = $findattacktarget;
+                               $findtarget->execute($ND::UID,$tick,$planet_id) or $ND::ERROR .= p $DBH->errstr;;
                        }elsif ($mission eq 'Defend'){
                                $findtarget = $finddefensetarget;
+                               $findtarget->execute($planet_id,$tick) or $ND::ERROR .= p $DBH->errstr;;
                        }
 
-                       $findtarget->execute($ND::UID,$tick,$planet_id) or $ND::ERROR .= p $DBH->errstr;;
+                       $addfleet->execute($ND::UID,$planet_id,$mission,$tick,$ND::UID,$eta,$tick+$eta-1) or $error .= '<p>'.$DBH->errstr.'</p>';
+                       my $fleet = $DBH->last_insert_id(undef,undef,undef,undef,"fleets_id_seq");
+                       $mission{Fleet} = $fleet;
+                       $mission{Back} = $tick+$eta-1;
+                       my $ships = $10;
+                       my @ships;
+                       while ($ships =~ m/((?:\w+ )*\w+)\s+\w+\s+\w+\s+(?:Steal|Normal|Emp|Normal\s+Cloaked|Pod|Struc)\s+(\d+)/g){
+                               $addships->execute($fleet,$1,$2) or $ND::ERROR .= p $DBH->errstr;
+                               push @ships,{Ship => $1, Amount => $2};
+                       }
+                       $mission{Ships} = \@ships;
 
                        if ($findtarget->rows == 0){
-                               $mission{Warning} = "YOU DON'T HAVE A TARGET WITH THAT LANDING TICK";
+                               $mission{Warning} = p b 'No matching target!';
                        }elsif ($mission eq 'Attack'){
                                my $claim = $findtarget->fetchrow_hashref;
                                if ($claim->{launched}){
@@ -103,19 +117,11 @@ sub render_body {
                                        $mission{Warning} = "OK:$claim->{target},$claim->{wave},$claim->{launched}";
                                        log_message $ND::UID,"Gave attack point for confirmation on $mission mission to $x:$y:$z, landing tick $tick";
                                }
+                       }elsif ($mission eq 'Defend'){
+                               my $call = $findtarget->fetchrow_hashref;
+                               $informDefChannel->execute($fleet,$call->{id}) or $ND::ERROR .= p $DBH->errstr;
                        }
 
-                       $addfleet->execute($ND::UID,$planet_id,$mission,$tick,$ND::UID,$eta,$tick+$eta-1) or $error .= '<p>'.$DBH->errstr.'</p>';
-                       my $fleet = $DBH->last_insert_id(undef,undef,undef,undef,"fleets_id_seq");
-                       $mission{Fleet} = $fleet;
-                       $mission{Back} = $tick+$eta-1;
-                       my $ships = $10;
-                       my @ships;
-                       while ($ships =~ m/((?:\w+ )*\w+)\s+\w+\s+\w+\s+(?:Steal|Normal|Emp|Normal\s+Cloaked|Pod|Struc)\s+(\d+)/g){
-                               $addships->execute($fleet,$1,$2) or $ND::ERROR .= p $DBH->errstr;
-                               push @ships,{Ship => $1, Amount => $2};
-                       }
-                       $mission{Ships} = \@ships;
                        log_message $ND::UID,"Pasted confirmation for $mission mission to $x:$y:$z, landing tick $tick";
                        push @missions,\%mission;
                }