X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=ND%2FWeb%2FPages%2FLaunchConfirmation.pm;h=dda401e1102eafdb2785402472467427ede6ba8d;hb=aee4364ac18d6ec1c7ba9e225423ea46aafdeee7;hp=29cb13cfed51e78f199aeb5ec2e0d8b11d82260b;hpb=9ce5a8529e75cb109ed9ba3fc788c94ef47b1080;p=ndwebbie.git diff --git a/ND/Web/Pages/LaunchConfirmation.pm b/ND/Web/Pages/LaunchConfirmation.pm index 29cb13c..dda401e 100644 --- a/ND/Web/Pages/LaunchConfirmation.pm +++ b/ND/Web/Pages/LaunchConfirmation.pm @@ -24,23 +24,20 @@ use CGI qw/:standard/; use ND::Web::Include; use ND::Include; -$ND::PAGES{launchConfirmation} = {parse => \&parse, process => \&process, render=> \&render}; +use base qw/ND::Web::XMLPage/; +$ND::Web::Page::PAGES{launchConfirmation} = __PACKAGE__; -sub parse { -} - -sub process { - -} +sub render_body { + my $self = shift; + my ($BODY) = @_; + $self->{TITLE} = 'Launch Confirmation'; + my $DBH = $self->{DBH}; -sub render { - my ($DBH,$BODY) = @_; - $ND::TEMPLATE->param(TITLE => 'Launch Confirmation'); + return $self->noAccess unless $self->isMember; my $error; - return $ND::NOACCESS unless isMember(); if (defined param('cmd') && param('cmd') eq 'submit'){ my $missions = param('mission'); @@ -50,75 +47,81 @@ sub render { 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 = ?),?,?)}); 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); + 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,$ND::PLANET); + $insert->execute($ND::UID,$self->{PLANET}) or $ND::ERROR .= p $DBH->errstr;; } 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 = $ND::TICK+$8; + 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; - $mission{Tick} = $tick; - $mission{Mission} = $mission; - $mission{Target} = "$x:$y:$z"; if ($12){ $tick = $12; }elsif ($13){ $eta += $13; } + $mission{Tick} = $tick; + $mission{Mission} = $mission; + $mission{Target} = "$x:$y:$z"; - my ($planet_id) = $DBH->selectrow_array($findplanet,undef,$x,$y,$z,$ND::TICK); + 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;; }elsif ($mission eq 'Defend'){ $findtarget = $finddefensetarget; + $findtarget->execute($planet_id,$tick) or $ND::ERROR .= p $DBH->errstr;; } - $findtarget->execute($ND::UID,$tick,$planet_id); + $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; + 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}){ $mission{Warning} = "Already launched on this target:$claim->{target},$claim->{wave},$claim->{launched}"; }else{ - $addattackpoint->execute($ND::UID); - $launchedtarget->execute($ND::UID,$claim->{target},$claim->{wave}); + $addattackpoint->execute($ND::UID) or $ND::ERROR .= p $DBH->errstr; + $launchedtarget->execute($ND::UID,$claim->{target},$claim->{wave}) or $ND::ERROR .= p $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; } - $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; - 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); - 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; }