X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=NDWeb%2FPages%2FLaunchConfirmation.pm;h=581ad7b71c2498a1d9ce2f2f803215ff8a9c87ae;hb=95365cc1a5b8827230e5213bf4dd3377949af7f0;hp=afb4b55d2ba92d94533e6a04f655aac4ac760fd2;hpb=d6c9085e748c4d61901aaea72f0e1546dcc7cdda;p=ndwebbie.git diff --git a/NDWeb/Pages/LaunchConfirmation.pm b/NDWeb/Pages/LaunchConfirmation.pm index afb4b55..581ad7b 100644 --- a/NDWeb/Pages/LaunchConfirmation.pm +++ b/NDWeb/Pages/LaunchConfirmation.pm @@ -17,16 +17,16 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * #**************************************************************************/ -package ND::Web::Pages::LaunchCoonfirmation; +package NDWeb::Pages::LaunchCoonfirmation; use strict; use warnings FATAL => 'all'; use CGI qw/:standard/; -use ND::Web::Include; +use NDWeb::Include; use ND::Include; -use base qw/ND::Web::XMLPage/; +use base qw/NDWeb::XMLPage/; -$ND::Web::Page::PAGES{launchConfirmation} = __PACKAGE__; +$NDWeb::Page::PAGES{launchConfirmation} = __PACKAGE__; sub render_body { my $self = shift; @@ -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 .= '

'.$DBH->errstr.'

'; - 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; - 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; + my $amount = 0; + while ($ships =~ m/((?:\w+ )*\w+)\s+\w+\s+(?:(?:\w+|-)\s+){3}(?:Steal|Normal|Emp|Normal\s+Cloaked|Pod|Structure Killer)\s+(\d+)/g){ + $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 .= '

'.$DBH->errstr.'

'; + $DBH->commit or warn $DBH->errstr; $BODY->param(Missions => \@missions); } $BODY->param(Error => $error);