X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=ND%2FInclude.pm;h=81b21122f70ce7e446b643ee17baaa65c1b6101b;hb=b7cdc3406c4e318da99e18827e18d52311a56b06;hp=a01a37f6909fbeb0e3e766fce3b65c27655661fd;hpb=b0f108eb4600f42fe3391acbe86381ce0c2d4681;p=ndwebbie.git diff --git a/ND/Include.pm b/ND/Include.pm index a01a37f..81b2112 100644 --- a/ND/Include.pm +++ b/ND/Include.pm @@ -20,39 +20,44 @@ package ND::Include; use strict; use warnings FATAL => 'all'; +use CGI qw{:standard}; require Exporter; our @ISA = qw/Exporter/; -our @EXPORT = qw/isMember isHC isDC isBC isOfficer isScanner isIntel parseMarkup min max listTargets - alliances intelquery/; +our @EXPORT = qw/isMember isHC isDC isBC isOfficer isScanner isIntel isTech parseMarkup min max listTargets + alliances intelquery generateClaimXml markThreadAsRead/; sub isMember { - return exists $ND::GROUPS{Members}; + return exists $ND::GROUPS{Members} || isTech(); } sub isHC { - return exists $ND::GROUPS{HC}; + return exists $ND::GROUPS{HC} || isTech(); } sub isDC { - return exists $ND::GROUPS{DC}; + return exists $ND::GROUPS{DC} || isTech(); } sub isBC { - return exists $ND::GROUPS{BC}; + return exists $ND::GROUPS{BC} || isTech(); } sub isOfficer { - return exists $ND::GROUPS{Officers}; + return exists $ND::GROUPS{Officers} || isTech(); } sub isScanner { - return exists $ND::GROUPS{Scanners}; + return exists $ND::GROUPS{Scanners} || isTech(); } sub isIntel { - return exists $ND::GROUPS{Intel}; + return exists $ND::GROUPS{Intel} || isTech(); +} + +sub isTech { + return exists $ND::GROUPS{Tech}; } sub parseMarkup { @@ -63,6 +68,18 @@ sub parseMarkup { return $text; } +sub markThreadAsRead { + my ($thread) = @_; + my $rows = $ND::DBH->do(q{UPDATE forum_thread_visits SET time = now() +WHERE uid = $1 AND ftid = $2},undef,$ND::UID,$thread); + if ($rows == 0){ + $ND::DBH->do(q{INSERT INTO forum_thread_visits (uid,ftid) VALUES ($1,$2)} + ,undef,$ND::UID,$thread) or $ND::ERROR .= p($ND::DBH->errstr); + }elsif(not defined $rows){ + $ND::ERROR .= p($ND::DBH->errstr); + } +} + sub min { my ($x,$y) = @_; return ($x > $y ? $y : $x); @@ -99,6 +116,7 @@ ORDER BY r.tick+c.wave,x,y,z}); sub alliances { my ($alliance) = @_; my @alliances; + $alliance = -1 unless defined $alliance; push @alliances,{Id => -1, Name => ' ', Selected => not $alliance}; my $query = $ND::DBH->prepare(q{SELECT id,name FROM alliances ORDER BY name}); $query->execute; @@ -120,4 +138,73 @@ GROUP BY i.tick,i.mission,t.x,t.y,t.z,o.x,o.y,o.z,i.amount,i.ingal,u.username,t. ORDER BY i.tick DESC, i.mission}; } + +sub generateClaimXml { + my ($raid, $from, $target) = @_; + + my ($timestamp) = $ND::DBH->selectrow_array("SELECT MAX(modified)::timestamp AS modified FROM raid_targets"); + $ND::BODY->param(Timestamp => $timestamp); + if ($target){ + $target = "r.id = $target"; + $_ = listTargets(); + $ND::BODY->param(TargetList => $_); + }else{ + $target = "r.raid = $raid->{id}"; + } + + if ($from){ + $from = "AND modified > '$from'"; + }else{ + $from = ''; + } + my $targets = $ND::DBH->prepare(qq{SELECT r.id,r.planet FROM raid_targets r WHERE $target $from}); + $targets->execute or print p($ND::DBH->errstr); + my $claims = $ND::DBH->prepare(qq{ SELECT username,joinable,launched FROM raid_claims + NATURAL JOIN users WHERE target = ? AND wave = ?}); + my @targets; + while (my $target = $targets->fetchrow_hashref){ + my %target; + $target{Id} = $target->{id}; + $target{Coords} = $target->{id}; + my @waves; + for (my $i = 1; $i <= $raid->{waves}; $i++){ + my %wave; + $wave{Id} = $i; + $claims->execute($target->{id},$i); + my $joinable = 0; + my $claimers; + if ($claims->rows != 0){ + my $owner = 0; + my @claimers; + while (my $claim = $claims->fetchrow_hashref){ + $owner = 1 if ($ND::USER eq $claim->{username}); + $joinable = 1 if ($claim->{joinable}); + $claim->{username} .= '*' if ($claim->{launched}); + push @claimers,$claim->{username}; + } + $claimers = join '/', @claimers; + if ($owner){ + $wave{Command} = 'Unclaim'; + if ($raid->{released_coords}){ + $target{Coords} = $ND::DBH->selectrow_array('SELECT coords(x,y,z) FROM current_planet_stats WHERE id = ?',undef,$target->{planet}); + } + }elsif ($joinable){ + $wave{Command} = 'Join'; + }else{ + $wave{Command} = 'none'; + } + }else{ + #if (!isset($planet) || ($target->value/$planet->value > 0.4 || $target->score/$planet->score > 0.4)) + $wave{Command} = 'Claim'; + } + $wave{Claimers} = $claimers; + $wave{Joinable} = $joinable; + push @waves,\%wave; + } + $target{Waves} = \@waves; + push @targets,\%target; + } + $ND::BODY->param(Targets => \@targets); +} + 1;