our @ISA = qw/Exporter/;
-our @EXPORT = qw/parseMilScan doMilScan/;
+our @EXPORT = qw/parseMilScan doMilScan doPlanetScan/;
my %classes = (Fighter => 'Fi', Corvette => 'Co', Frigate => 'Fr', Destroyer => 'De', Cruiser => 'Cr', Battleship => 'Bs', Structure => 'St', Roids => 'Ro', Resources => 'Re', '-' => '-');
}
}
+my $addplanetscan_sql = q{INSERT INTO planet_scans
+ (id,tick,pid,metal_roids,metal,crystal_roids,crystal,eonium_roids,eonium
+ ,agents,guards,light,medium,heavy,hidden)
+ VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)};
+
+sub doPlanetScan ($$$) {
+ my ($dbh, $scan,$file) = @_;
+
+ my $addplanetscan = $dbh->prepare_cached($addplanetscan_sql);
+
+ my @values = ($scan->{id},$scan->{tick},$scan->{pid});
+ $file =~ s/(\d),(\d)/$1$2/g;
+
+ while($file =~ m{"center">(Metal|Crystal|Eonium)</td>\D+(\d+)\D+([\d,]+)}g){
+ push @values,$2,$3;
+ }
+ if($file =~ m{Security\ Guards .+? "center">(\d+)</td>
+ .+? "center">(\d+)</td>}sx){
+ push @values,$1,$2;
+ }
+ if($file =~ m{<td class="center">([A-Z][a-z]+)</td><td class="center">([A-Z][a-z]+)</td><td class="center">([A-Z][a-z]+)</td>}){
+ push @values,$1,$2,$3;
+ }
+ if($file =~ m{<span class="superhighlight">([\d,]+)</span>}){
+ push @values,$1;
+ }
+ $addplanetscan->execute(@values);
+}
VALUES(?,?,?,?,?,?,?,?,?,-1) RETURNING id});
my $intelscan = $dbh->prepare(q{INSERT INTO intel_scans (intel,id) VALUES(?,?)});
my $addships = $dbh->prepare(q{INSERT INTO fleet_ships (fid,ship,amount) VALUES(?,?,?)});
-my $addplanetscan = $dbh->prepare(q{INSERT INTO planet_scans
- (id,tick,pid,metal_roids,metal,crystal_roids,crystal,eonium_roids,eonium
- ,agents,guards,light,medium,heavy,hidden)
- VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)});
sub parse_planet {
my ($scan,$file) = @_;
- my @values = ($scan->{id},$scan->{tick},$scan->{pid});
- $file =~ s/(\d),(\d)/$1$2/g;
-
- while($file =~ m{"center">(Metal|Crystal|Eonium)</td>\D+(\d+)\D+([\d,]+)}g){
- push @values,$2,$3;
- }
- if($file =~ m{Security\ Guards .+? "center">(\d+)</td>
- .+? "center">(\d+)</td>}sx){
- push @values,$1,$2;
- }
- if($file =~ m{<td class="center">([A-Z][a-z]+)</td><td class="center">([A-Z][a-z]+)</td><td class="center">([A-Z][a-z]+)</td>}){
- push @values,$1,$2,$3;
- }
- if($file =~ m{<span class="superhighlight">([\d,]+)</span>}){
- push @values,$1;
- }
- $addplanetscan->execute(@values);
+ doPlanetScan($dbh, $scan, $file);
}
sub parse_incoming {
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="iso-8859-1">
+ <title>Planetarion > Scan</title>
+ <link href="images/template53/planetarion.css?rn=r100.0002" rel="stylesheet" type="text/css">
+ <link rel="stylesheet" type="text/css" href="javascript/jquery/ui-1.10.3.css">
+ <link rel="shortcut icon" type="image/ico" href="images/favicon.ico">
+ <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" integrity="sha256-wS9gmOZBqsqWxgIVgA8Y9WcQOa7PgSIX+rPA0VL2rbQ=" crossorigin="anonymous"></script>
+ <script>window.jQuery || document.write('<script src=\"javascript/jquery/jquery-1.9.1.js\"><\/script>')</script>
+ <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js" integrity="sha256-lnH4vnCtlKU2LmD0ZW1dU7ohTTKrcKP50WA9fa350cE=" crossorigin="anonymous"></script>
+ <script>window.jQuery.ui || document.write('<script src=\"javascript/jquery/ui-1.10.3.js\"><\/script>')</script>
+ <script src="javascript/jq_0.3.4.js"></script>
+ <script src="javascript/global.js?r94.0001"></script>
+ <script src="javascript/bcalc_0.3.5.js"></script>
+ <script>
+ (function(i,s,o,g,r,a,m) { i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-44044400-2', 'planetarion.com');
+ ga('send', 'pageview');
+ </script>
+ </head>
+ <body class="linux chrome chrome108">
+ <script>
+ var PA = {
+ "servertime": 1673734778000,
+ "timediff": (1673734778000 - (new Date().getTime())),
+ "ticking": 1,
+ "tick_speed": 3600,
+ "last_tick": 27,
+ "round_start": 1673640000000,
+ "round_end": 1677873600000,
+ "page": "scan",
+ "mobile": 0
+ };
+ </script>
+ <div id="load_box" style="display: none;"></div>
+ <div id="page_scan" class="pages">
+<div id="top">
+ <a href="http://www.planetarion.com" id="logo"></a>
+ <div id="tnav">
+ <ul id="tnav_links">
+ <li class="tnav_link"><a href="manual.pl" target="_blank" id="bar_manual"><span>Manual</span></a></li>
+ <li class="tnav_link"><a href="support.pl" target="_blank" id="bar_support"><span>Support</span></a></li>
+ <li class="tnav_link"><a href="http://www.planetarion.com/" target="_blank" id="bar_portal"><span>Portal</span></a></li>
+ <li class="tnav_link"><a href="http://pirate.planetarion.com" target="_blank" id="bar_forums"><span>Forums</span></a></li>
+ <li class="tnav_link"><a href="logout.pl" id="bar_logout"><span>Logout</span></a></li>
+ </ul>
+ </div>
+</div>
+
+<div id="full_page">
+ <div id="contents">
+ <div id="contents_header"></div>
+<div class="container" id="scan">
+ <div class="header">Scan Result <a href="#" class="show_hide" id="scan_showhide">[Hide]</a></div>
+ <div class="maintext">
+<p class="center"><a href="showscan.pl?scan_id=aaxq2l9pspfhb88" target="scan">Scan Link</a><br>[scan]aaxq2l9pspfhb88[/scan]</p>
+<p class="right scan_time">Scan time: Sat, 14 Jan 19:32:27</p>
+<p class="center"><a href="#" onclick="set_ships_cookie(event, 'scan', 'aaxq2l9pspfhb88', 'Value: 149,656\nScore: 160,936\nMetal Roids: 100\nCrystal Roids: 130\nEonium Roids: 100\n');">Add To Bcalc</a><span class="bcalc_links" id="bcalc_link_aaxq2l9pspfhb88"></span><br><span class="bcalc_target" id="bcalc_target_aaxq2l9pspfhb88"></span></p>
+<h2 class="center header">Planet Scan on 4:4:7 in tick 24</h2>
+<table>
+ <tr><td colspan="2" class="center">Sandwich Full of Billy Roll (Ter)</td></tr>
+ <tr><th style="width: 50%;" class="center">Value</th><th style="width: 50%;" class="center">Score</th></tr>
+ <tr><td style="width: 50%;" class="center">149,656</td><td style="width: 50%;" class="center">160,936</td></tr>
+</table>
+<table>
+ <tr><th style="width: 50%;" class="center">Agents</th><th style="width: 50%;" class="center">Security Guards</th></tr>
+ <tr><td style="width: 50%;" class="center">100</td><td style="width: 50%;" class="center">805</td></tr>
+</table>
+<table>
+ <tr><th style="width: 33%;" class="center">Type</th><th style="width: 33%;" class="center">Asteroids</th><th style="width: 33%;" class="center">Resources</th></tr>
+ <tr><td class="center">Metal</td><td class="center">100</td><td class="center">78,363</td></tr>
+ <tr><td class="center">Crystal</td><td class="center">130</td><td class="center">147,874</td></tr>
+ <tr><td class="center">Eonium</td><td class="center">100</td><td class="center">169,077</td></tr>
+ <tr><th class="center" colspan="3"></th></tr>
+ <tr><th class="center" colspan="3">Factory Usage</th></tr>
+ <tr><th class="center">Light</th><th class="center">Medium</th><th class="center">Heavy</th></tr>
+ <tr><td class="center">None</td><td class="center">High</td><td class="center">None</td></tr>
+</table>
+<p class="center">Total Amount of Resources in Production: <span class="superhighlight">4,612,500</span><br>
+Total Amount of Resources From Ships Being Sold: <span class="superhighlight">0</span></p>
+<hr><br>
+ </div>
+ <div class="footer"></div>
+</div>
+<div id="side_select_box" style="display: none;">
+<p class="right"><a href="#" title="close" onclick="hide(event, 'side_select_box')">X</a> </p>
+<p class="center" id="side_select"></p>
+</div>
+ <div id="contents_footer"></div>
+ </div>
+ <div id="footer"></div>
+</div>
+ </div>
+ </body>
+</html>
is($exec_history->[4]->{params}->[1], 'Chimera');
is($exec_history->[4]->{params}->[2], 54500);
}
+
+}
+
+my $planetscan = do {
+ open my $in, '<', "$FindBin::Bin/planetscan.html" or die "Can't read file: $!";
+ local $/;
+ <$in>
+};
+
+$dbh->{mock_clear_history} = 1;
+{
+ my $scan = {id => 31337, type => 'Planet', pid => 1337, tick => 123};
+ doPlanetScan($dbh, $scan, $planetscan);
+ my $history = $dbh->{mock_all_history};
+ is(scalar(@{$history}), 1, 'Add planet scan');
+
+ my $sth = $history->[0];
+ my $exec_history = $sth->{execution_history};
+ like($sth->statement,
+ qr{\QINSERT INTO planet_scans\E\s*
+ \(id,tick,pid,metal_roids,metal,crystal_roids,crystal,eonium_roids,eonium
+ \s*,agents,guards,light,medium,heavy,hidden\).*}xsi,
+ );
+ is(scalar(@{$exec_history}), 1);
+ is(scalar(@{$exec_history->[0]->{params}}), 15);
+ is($exec_history->[0]->{params}->[0], $scan->{id});
+ is($exec_history->[0]->{params}->[1], $scan->{tick});
+ is($exec_history->[0]->{params}->[2], $scan->{pid});
+ is($exec_history->[0]->{params}->[3], 100);
+ is($exec_history->[0]->{params}->[4], 78363);
+ is($exec_history->[0]->{params}->[5], 130);
+ is($exec_history->[0]->{params}->[6], 147874);
+ is($exec_history->[0]->{params}->[7], 100);
+ is($exec_history->[0]->{params}->[8], 169077);
+ is($exec_history->[0]->{params}->[9], 100);
+ is($exec_history->[0]->{params}->[10], 805);
+ is($exec_history->[0]->{params}->[11], 'None');
+ is($exec_history->[0]->{params}->[12], 'High');
+ is($exec_history->[0]->{params}->[13], 'None');
+ is($exec_history->[0]->{params}->[14], '4612500');
}
done_testing();