summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--data/docs/223
-rw-r--r--lib/Multi/IRC.pm16
3 files changed, 29 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index af5eaefd..2a269f21 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,4 @@
-git - ?
+2.7 - 2009-09-24
- Improved styling of the threeboxes layout
- Blacklist a users' votes from the VN vote statistics
- usermods can browse a users' votes and list even when they are hidden
diff --git a/data/docs/2 b/data/docs/2
index 77a66169..3f402aab 100644
--- a/data/docs/2
+++ b/data/docs/2
@@ -3,11 +3,24 @@
:SUB:When to add a visual novel
<p>
- A visual novel should be added if the visual novel and/or adventure (VN/ADV)
- parts play an important part of the game (more than one-third), or the VN/ADV
- parts have great consequences on the outcome of the game.<br />
- If a game is an official fandisk or sidedisk, it should also be added for
- completeness.
+ To be included in this database, a game needs to use the novel narrative
+ consistently for telling its story. Examples include describing <a
+ href="http://s.vndb.org/sf/58/258.jpg">visuals</a>, <a
+ href="http://s.vndb.org/sf/63/2663.jpg">events</a>, <a
+ href="http://s.vndb.org/sf/74/274.jpg">character actions</a> or <a
+ href="http://s.vndb.org/sf/49/449.jpg">thoughts</a>. This storytelling needs to
+ be employing one of the known Visual Novel presentation methods such as <a
+ href="http://s.vndb.org/sf/40/3440.jpg">ADV</a>, <a
+ href="http://s.vndb.org/sf/52/3152.jpg">NVL</a> and their <a
+ href="http://s.vndb.org/sf/39/339.jpg">variations</a>.<br />
+ <br />
+ A game that 'feels' like a VN even though it has another function than strickly
+ narrating a story (such as, highly interactive simulation) may qualify if it's
+ either told entirely in ADV/NVL style or has its other gameplay elements
+ clearly subordinated to the textual elements (presented in ADV/NVL style) (ie.
+ action scenes in 3D games cannot be argued to be subordinated to their textual
+ elements as the visuals are clearly the 'point' of the game; The completely
+ optional low-graphic 'dungeons' in Princess Maker games would be).
</p>
:SUB:General info
diff --git a/lib/Multi/IRC.pm b/lib/Multi/IRC.pm
index 4f417083..5018d2aa 100644
--- a/lib/Multi/IRC.pm
+++ b/lib/Multi/IRC.pm
@@ -190,7 +190,7 @@ sub irc_001 {
sub irc_public { # mask, dest, msg
- $_[HEAP]{idlequotes}{$_[ARG1][0]} = 0;
+ $_[HEAP]{idlequotes}{ lc($_[ARG1][0]) } = 0;
return if $_[KERNEL]->call($_[SESSION] => command => @_[ARG0..$#_]);
$_[KERNEL]->call($_[SESSION] => vndbid => $_[ARG1], $_[ARG2]);
}
@@ -223,11 +223,14 @@ sub command { # mask, dest, msg
my $lvl = $_[HEAP]{commands}{$cmd} & ~8;
my $usr = parse_user($mask);
+ my $ulvl = grep(matches_mask($_, $mask), @{$_[HEAP]{masters}}) ? 2 :
+ ($irc->is_channel_operator($_[HEAP]{channels}[0], $usr) || $irc->is_channel_owner($_[HEAP]{channels}[0], $usr)) ? 1 : 0;
+
return $_[KERNEL]->yield(reply => $dest,
$dest->[0] eq $_[HEAP]{channels}[0] ? 'Only OPs can do that!' : "Only $_[HEAP]{channel}[0] OPs can do that!", $usr) || 1
- if $lvl == 1 && !$irc->is_channel_operator($_[HEAP]{channels}[0], $usr);
+ if $lvl == 1 && $ulvl < 1;
return $_[KERNEL]->yield(reply => $dest, 'You are not my master!', $usr) || 1
- if $lvl == 2 && !grep matches_mask($_, $mask), @{$_[HEAP]{masters}};
+ if $lvl == 2 && $ulvl < 2;
return $_[KERNEL]->yield('cmd_'.$cmd, $usr, $dest, $arg, $mask) || 1;
}
@@ -237,7 +240,7 @@ sub idlequote {
for (keys %{$_[HEAP]{idlequotes}}) {
next if --$_[HEAP]{idlequotes}{$_} > 0;
$_[KERNEL]->yield(cmd_quote => '', [$_]) if $_[HEAP]{idlequotes}{$_} == 0;
- $_[HEAP]{idlequotes}{$_} = int(60+rand(300));
+ $_[HEAP]{idlequotes}{$_} = int(120+rand(600));
}
$_[KERNEL]->delay(idlequote => 60);
}
@@ -270,7 +273,7 @@ sub notify { # name, pid, payload
LEFT JOIN releases_rev rr ON c.type = 1 AND c.id = rr.id
LEFT JOIN producers_rev pr ON c.type = 2 AND c.id = pr.id
JOIN users u ON u.id = c.requester
- WHERE c.id > ?
+ WHERE c.id > ? AND c.requester <> 1
ORDER BY c.added|
: $_[ARG0] eq 'newpost' ? q|SELECT
't' AS type, tp.tid AS id, tp.num AS rev, t.title, u.username, tp.date AS lastpost, |.GETBOARDS.q|
@@ -292,7 +295,7 @@ sub notify { # name, pid, payload
sub notify_result { # num, res
return if $_[ARG0] < 1;
- my $r = $_[ARG1][0];
+ my $r = $_[ARG1][$#{$_[ARG1]}];
$_[HEAP]{lastrev} = $r->{lastrev} if $r->{lastrev};
$_[HEAP]{lastpost} = $r->{lastpost} if $r->{lastpost};
$_[HEAP]{lasttag} = $r->{lasttag} if $r->{lasttag};
@@ -558,6 +561,7 @@ sub formatid {
push @msg, RED.'By'.NORMAL.' '.$_->{username} if $_->{username};
# (only if comments key is present) Summary:
+ $_->{comments} =~ s/\n/ /g if $_->{comments};
push @msg, RED.'Summary:'.NORMAL.' '.(
length $_->{comments} > 40 ? substr($_->{comments}, 0, 37).'...' : $_->{comments}
) if defined $_->{comments};