X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=Commands%2FPA.pm;h=9f7ae8a4071542d536ee3e705c0db5288f8f256d;hb=6815b7a875e95937693864b76a028f92ee2cbf35;hp=2dcb00671d0c90ccc3355f138606ffd50ce7100d;hpb=ae37bc6b64270f8c65298a36fce1f4bad761231f;p=NDIRC.git diff --git a/Commands/PA.pm b/Commands/PA.pm index 2dcb006..9f7ae8a 100644 --- a/Commands/PA.pm +++ b/Commands/PA.pm @@ -55,11 +55,22 @@ sub p } my $f = $c->model->prepare(q{ -SELECT coords(x,y,z),ruler,planet,race,score,size,value,scorerank,sizerank, - valuerank, xp, xprank, alliance, relationship, nick, planet_status, hit_us, channel -FROM current_planet_stats WHERE (x = $1 AND y = $2 and z = $3) OR nick ILIKE $4 LIMIT 1 +WITH p AS (SELECT pid,coords(x,y,z),ruler,planet,race,score,size,value,scorerank,sizerank, + valuerank, xp, xprank, alliance, relationship, nick, planet_status, hit_us, channel + FROM current_planet_stats + WHERE (x = $1 AND y = $2 and z = $3) OR nick ILIKE $4 LIMIT 1 +), t AS (SELECT tag,bool_or(uid = $5) AS own,max(time) AS time + FROM planet_tags + WHERE pid = (SELECT pid FROM p) + AND ($6 OR uid = $5) + GROUP BY tag + ORDER BY time DESC +), tags AS (SELECT array_to_string(array_agg(tag || CASE WHEN own THEN '*' ELSE '' END),' ') AS tags + FROM t +) +SELECT * FROM p, tags; }); - $f->execute($x,$y,$z,$nick); + $f->execute($x,$y,$z,$nick,$c->uid,$c->check_user_roles(qw/irc_p_intel/) // 0); if (my $planet = $f->fetchrow_hashref()){ for (keys %{$planet}){ $planet->{$_} = valuecolor(1,$planet->{$_}); @@ -68,7 +79,7 @@ FROM current_planet_stats WHERE (x = $1 AND y = $2 and z = $3) OR nick ILIKE $4 if ($c->check_user_roles(qw/irc_p_intel/)){ $ally = "Alliance=$planet->{alliance} ($planet->{relationship}), Nick=$planet->{nick} ($planet->{planet_status}), Channel: $planet->{channel}, Hostile Count: $planet->{hit_us},"; } - $c->reply("$planet->{coords} $planet->{ruler} OF $planet->{planet},$ally Race=$planet->{race}, Score=$planet->{score} ($planet->{scorerank}), Size=$planet->{size} ($planet->{sizerank}), Value=$planet->{value} ($planet->{valuerank}), XP=$planet->{xp} ($planet->{xprank})"); + $c->reply("$planet->{coords} $planet->{ruler} OF $planet->{planet},$ally Race=$planet->{race}, Score=$planet->{score} ($planet->{scorerank}), Size=$planet->{size} ($planet->{sizerank}), Value=$planet->{value} ($planet->{valuerank}), XP=$planet->{xp} ($planet->{xprank}) TAGS: $planet->{tags}"); }else{ $c->reply("Couldn't find planet: $msg"); } @@ -126,8 +137,8 @@ sub xp my ($avalue,$ascore) = $c->model->selectrow_array(q{ SELECT value,score FROM current_planet_stats -WHERE pid = (SELECT pid FROM users WHERE hostmask ILIKE ?) - }, undef, $c->host); +WHERE pid = (SELECT pid FROM users WHERE uid = ?) + }, undef, $c->uid); my ($tvalue,$tscore,$tsize) = $c->model->selectrow_array(q{ SELECT value,score,size FROM current_planet_stats WHERE x = ? AND y = ? and z = ? @@ -167,8 +178,8 @@ sub fco my ($value,$score) = $c->model->selectrow_array(q{ SELECT value,score FROM planet_stats WHERE tick = $2 AND - pid = (SELECT pid FROM users WHERE hostmask ILIKE $1) - }, undef, $c->host,$tick); + pid = (SELECT pid FROM users WHERE uid = $1) + }, undef, $c->uid,$tick); unless ($value){ $c->reply("You don't have a planet registered."); return;