]> ruin.nu Git - ndwebbie.git/commitdiff
Launch Confirmation updated for new fleets table
authorMichael Andreen <harv@ruin.nu>
Fri, 28 Dec 2007 16:00:03 +0000 (17:00 +0100)
committerMichael Andreen <harv@ruin.nu>
Fri, 28 Dec 2007 16:00:03 +0000 (17:00 +0100)
NDWeb/Pages/LaunchConfirmation.pm

index eb2ff6bb5aaa2d9b2d4e45ed1d56b9c6304d7b8a..92217db36443a0bf2aaed9ec0ace2af5b82b0bbf 100644 (file)
@@ -47,64 +47,85 @@ 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 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 = ?),?,?)});
-               my $addships = $DBH->prepare('INSERT INTO fleet_ships (fleet,ship,amount) VALUES (?,?,?)');
-
-               my $fleet = $DBH->prepare("SELECT id FROM fleets WHERE uid = ? AND fleet = 0");
-               my ($basefleet) = $DBH->selectrow_array($fleet,undef,$ND::UID) or $ND::ERROR .= p $DBH->errstr;;
-               unless ($basefleet){
-                       my $insert = $DBH->prepare(q{INSERT INTO fleets (uid,target,mission,landing_tick,fleet,eta,back) VALUES (?,?,'Full fleet',0,0,0,0)});
-                       $insert->execute($ND::UID,$self->{PLANET}) or $ND::ERROR .= p $DBH->errstr;;
-               }
+               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(q{UPDATE users SET 
+                       attack_points = attack_points + 1 WHERE uid = ?});
+               my $launchedtarget = $DBH->prepare(q{UPDATE raid_claims SET launched = True
+                       WHERE uid = ? AND target = ? AND wave = ?});
+               my $addfleet = $DBH->prepare(q{INSERT INTO fleets 
+                       (uid,name,mission,sender,target,tick,eta,back,amount)
+                       VALUES (?,?,?,?,?,?,?,?,?) RETURNING id
+               });
+               my $addships = $DBH->prepare(q{INSERT INTO fleet_ships (id,ship,amount)
+                       VALUES (?,?,?)});
                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+)|Return ETA: (\d+))/sg){
+               while ($missions =~ m/([^\n]+)\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+)
+                               )/sgx){
+                       next if $10 eq 'Return';
                        my %mission;
-                       next if $9 eq 'Return';
-
-                       my $tick = $self->{TICK}+$8;
-                       $tick += $7 if defined $7;
-                       my $eta = $8;
-                       my $mission = $9;
-                       my $x = $4;
-                       my $y = $5;
-                       my $z = $6;
-                       if ($12){
-                               $tick = $12;
-                       }elsif ($13){
-                               $eta += $13;
+                       my $name = $1;
+                       my $tick = $self->{TICK}+$9;
+                       $tick += $8 if defined $8;
+                       my $eta = $9;
+                       my $mission = $10;
+                       my $x = $5;
+                       my $y = $6;
+                       my $z = $7;
+                       my $back = $tick + $eta - 1;
+                       if ($13){
+                               $tick = $13;
+                       }elsif ($14){
+                               $back += $14;
                        }
                        $mission{Tick} = $tick;
                        $mission{Mission} = $mission;
                        $mission{Target} = "$x:$y:$z";
+                       $mission{Back} = $back;
 
                        my ($planet_id) = $DBH->selectrow_array($findplanet,undef,$x,$y,$z,$self->{TICK});
 
                        my $findtarget = $finddefensetarget;
                        if ($mission eq 'Attack'){
                                $findtarget = $findattacktarget;
-                               $findtarget->execute($ND::UID,$tick,$planet_id) or $ND::ERROR .= p $DBH->errstr;;
+                               $findtarget->execute($ND::UID,$tick,$planet_id) or warn $DBH->errstr;;
                        }elsif ($mission eq 'Defend'){
                                $findtarget = $finddefensetarget;
-                               $findtarget->execute($planet_id,$tick) or $ND::ERROR .= p $DBH->errstr;;
+                               $findtarget->execute($planet_id,$tick) or warn $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 = $11;
                        my @ships;
+                       my $amount = 0;
                        while ($ships =~ m/((?:\w+ )*\w+)\s+\w+\s+(?:(?:\w+|-)\s+){3}(?:Steal|Normal|Emp|Normal\s+Cloaked|Pod|Struc)\s+(\d+)/g){
-                               $addships->execute($fleet,$1,$2) or $ND::ERROR .= p $DBH->errstr;
+                               $amount += $2;
                                push @ships,{Ship => $1, Amount => $2};
                        }
                        $mission{Ships} = \@ships;
 
+                       if ($amount == 0){
+                               warn "No ships in: $ships";
+                               next;
+                       }
+                       my $fleet = $DBH->selectrow_array($addfleet,undef,$ND::UID,$name,$mission
+                               ,$self->{PLANET},$planet_id,$tick,$eta,$back,$amount);
+                       $mission{Fleet} = $fleet;
+                       for my $ship (@ships){
+                               $addships->execute($fleet,$ship->{Ship},$ship->{Amount})
+                                       or warn $DBH->errstr;
+                       }
+
                        if ($findtarget->rows == 0){
                                $mission{Warning} = p b 'No matching target!';
                        }elsif ($mission eq 'Attack'){
@@ -112,20 +133,20 @@ sub render_body {
                                if ($claim->{launched}){
                                        $mission{Warning} = "Already launched on this target:$claim->{target},$claim->{wave},$claim->{launched}";
                                }else{
-                                       $addattackpoint->execute($ND::UID) or $ND::ERROR .= p $DBH->errstr;
-                                       $launchedtarget->execute($ND::UID,$claim->{target},$claim->{wave}) or $ND::ERROR .= p $DBH->errstr;
+                                       $addattackpoint->execute($ND::UID) or warn $DBH->errstr;
+                                       $launchedtarget->execute($ND::UID,$claim->{target},$claim->{wave}) or warn $DBH->errstr;
                                        $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;
+                               $informDefChannel->execute($fleet,$call->{id}) or warn $DBH->errstr;
                        }
 
                        log_message $ND::UID,"Pasted confirmation for $mission mission to $x:$y:$z, landing tick $tick";
                        push @missions,\%mission;
                }
-               $DBH->commit or $error .= '<p>'.$DBH->errstr.'</p>';
+               $DBH->commit or warn $DBH->errstr;
                $BODY->param(Missions => \@missions);
        }
        $BODY->param(Error => $error);