mirror of
https://github.com/pragma-/pbot.git
synced 2024-12-23 19:22:40 +01:00
Implement "quickest answer" score tracking (and disable wrong answer streaks)
This commit is contained in:
parent
e6c18eb428
commit
0da2287cde
@ -5,6 +5,7 @@ use strict;
|
||||
|
||||
use Text::Levenshtein qw(fastdistance);
|
||||
use Time::HiRes qw(gettimeofday);
|
||||
use Time::Duration qw(duration);
|
||||
use Fcntl qw(:flock);
|
||||
|
||||
use Scorekeeper;
|
||||
@ -94,7 +95,14 @@ if (defined $ret) {
|
||||
if ($last_nick eq $nick) {
|
||||
print "$color{red}Er, you already correctly answered that question.$color{reset}\n";
|
||||
} else {
|
||||
print "$color{red}Too slow! $color{orange}$last_nick$color{red} got the correct answer.$color{reset}\n";
|
||||
my $elapsed = scalar gettimeofday - $last_timestamp;
|
||||
my $duration;
|
||||
if ($elapsed < 2) {
|
||||
$duration = sprintf("%.2f", $elapsed);
|
||||
} else {
|
||||
$duration = sprintf("%d", $elapsed);
|
||||
}
|
||||
print "$color{red}Too slow by $color{orange}$duration $color{red}second" . ($duration != 1 ? "s" : "") . "! $color{orange}$last_nick$color{red} got the correct answer.$color{reset}\n";
|
||||
}
|
||||
exit;
|
||||
}
|
||||
@ -126,7 +134,7 @@ foreach my $answer (@valid_answers) {
|
||||
$supplemental_text = $1;
|
||||
}
|
||||
|
||||
if ($answer =~ /^[0-9]+$/ and $lctext =~ /^[0-9]+$/) {
|
||||
if ($answer =~ /^[+-]*[0-9]+$/ and $lctext =~ /^[+-]*[0-9]+$/) {
|
||||
my $is_wrong = 0;
|
||||
|
||||
if ($lctext > $answer) {
|
||||
@ -157,9 +165,15 @@ foreach my $answer (@valid_answers) {
|
||||
}
|
||||
|
||||
if (defined $supplemental_text) {
|
||||
print " $color{purple}$supplemental_text$color{reset}\n";
|
||||
print " $color{purple}$supplemental_text$color{reset}";
|
||||
}
|
||||
|
||||
my $elapsed = scalar gettimeofday - $data[2];
|
||||
if ($elapsed < 60) {
|
||||
printf " It took %.2f seconds to answer that question!\n", $elapsed;
|
||||
} else {
|
||||
print "\n";
|
||||
my $duration = duration($elapsed);
|
||||
print " It took $duration to answer that question.\n";
|
||||
}
|
||||
|
||||
my $streakers = $scores->get_all_correct_streaks($channel);
|
||||
@ -181,6 +195,10 @@ foreach my $answer (@valid_answers) {
|
||||
$player_data->{last_correct_timestamp} = scalar gettimeofday;
|
||||
$player_data->{wrong_streak} = 0;
|
||||
|
||||
if ($player_data->{quickest_correct} == 0 or $elapsed < $player_data->{quickest_correct}) {
|
||||
$player_data->{quickest_correct} = $elapsed;
|
||||
}
|
||||
|
||||
if ($player_data->{correct_streak} > $player_data->{highest_correct_streak}) {
|
||||
$player_data->{highest_correct_streak} = $player_data->{correct_streak};
|
||||
}
|
||||
@ -261,6 +279,7 @@ if ($player_data->{highest_wrong_streak} > $player_data->{lifetime_highest_wrong
|
||||
$player_data->{lifetime_highest_wrong_streak} = $player_data->{highest_wrong_streak};
|
||||
}
|
||||
|
||||
=cut
|
||||
my %streaks = (
|
||||
3 => "$color{red}Guessing, are we, $color{orange}$nick$color{red}?",
|
||||
4 => "$color{red}Please use better guesses, $color{orange}$nick!",
|
||||
@ -275,6 +294,7 @@ my %streaks = (
|
||||
if (exists $streaks{$player_data->{wrong_streak}}) {
|
||||
print "$streaks{$player_data->{wrong_streak}}$color{reset}\n";
|
||||
}
|
||||
=cut
|
||||
|
||||
$scores->update_player_data($player_id, $player_data);
|
||||
$scores->end;
|
||||
|
@ -4,6 +4,7 @@ use warnings;
|
||||
use strict;
|
||||
|
||||
use Time::HiRes qw(gettimeofday);
|
||||
use Time::Duration qw(duration);
|
||||
|
||||
use Scorekeeper;
|
||||
use IRCColors;
|
||||
@ -40,6 +41,18 @@ if (lc $command eq 'score') {
|
||||
$score .= "current streak: $color{orange}$player_data->{correct_streak}$color{green}, ";
|
||||
$score .= "$color{green}highest streak: $color{orange}$player_data->{highest_correct_streak}" . ($player_data->{lifetime_highest_correct_streak} > $player_data->{highest_correct_streak} ? " [$player_data->{lifetime_highest_correct_streak}]" : "") . "$color{green}, ";
|
||||
|
||||
$score .= "quickest answer: $color{orange}";
|
||||
|
||||
if ($player_data->{quickest_correct} == 0) {
|
||||
$score .= "N/A";
|
||||
} elsif ($player_data->{quickest_correct} < 60) {
|
||||
$score .= sprintf("%.2f seconds", $player_data->{quickest_correct});
|
||||
} else {
|
||||
$score .= duration($player_data->{quickest_correct});
|
||||
}
|
||||
|
||||
$score .= "$color{green}, ";
|
||||
|
||||
$score .= "$color{red}wrong: $color{orange}$player_data->{wrong_answers}" . ($player_data->{lifetime_wrong_answers} > $player_data->{wrong_answers} ? " [$player_data->{lifetime_wrong_answers}]" : "") . "$color{red}, ";
|
||||
$score .= "current streak: $color{orange}$player_data->{wrong_streak}$color{red}, ";
|
||||
$score .= "$color{red}highest streak: $color{orange}$player_data->{highest_wrong_streak}" . ($player_data->{lifetime_highest_wrong_streak} > $player_data->{highest_wrong_streak} ? " [$player_data->{lifetime_highest_wrong_streak}]" : "") . "$color{red}, ";
|
||||
|
Loading…
Reference in New Issue
Block a user