summaryrefslogtreecommitdiff
path: root/data/rbot/plugins/quiz.rb
diff options
context:
space:
mode:
authorMark Kretschmann <markey@web.de>2006-09-20 09:18:25 +0000
committerMark Kretschmann <markey@web.de>2006-09-20 09:18:25 +0000
commit4aa585349ca0305bd512c18111a43c86fd5c5533 (patch)
treea5866619b786af438baf25c1c37a2efbdfcedd0b /data/rbot/plugins/quiz.rb
parent398935bfe28ac7b7ef3f92a6535b19761267aa81 (diff)
Bugfix for the quiz plugin: With newly created games (no scores yet known) the rank table handling would not work correctly. Effectively no player would be able to surpass the first player. This is now fixed.
Diffstat (limited to 'data/rbot/plugins/quiz.rb')
-rw-r--r--data/rbot/plugins/quiz.rb36
1 files changed, 24 insertions, 12 deletions
diff --git a/data/rbot/plugins/quiz.rb b/data/rbot/plugins/quiz.rb
index 83e6ff92..4cd26f15 100644
--- a/data/rbot/plugins/quiz.rb
+++ b/data/rbot/plugins/quiz.rb
@@ -199,46 +199,58 @@ class QuizPlugin < Plugin
end
- # Updates the per-channel rank table, which is kept for performance reasons
+ # Updates the per-channel rank table, which is kept for performance reasons.
+ # This table contains all players sorted by rank.
#
def calculate_ranks( m, q, nick )
if q.registry.has_key?( nick )
stats = q.registry[nick]
# Find player in table
+ found_player = false
i = 0
q.rank_table.each_index do |i|
- break if nick == q.rank_table[i][0]
+ if nick == q.rank_table[i][0]
+ found_player = true
+ break
+ end
end
- old_rank = i
- q.rank_table.delete_at( i )
+ # Remove player from old position
+ if found_player
+ old_rank = i
+ q.rank_table.delete_at( i )
+ else
+ old_rank = nil
+ end
# Insert player at new position
inserted = false
q.rank_table.each_index do |i|
- if stats.score >= q.rank_table[i][1].score
+ if stats.score > q.rank_table[i][1].score
q.rank_table[i,0] = [[nick, stats]]
inserted = true
break
end
end
- # If less than all other players' scores, append at the end
+ # If less than all other players' scores, append to table
unless inserted
+ i += 1 unless q.rank_table.empty?
q.rank_table << [nick, stats]
- i += 1
end
- if i < old_rank
- m.reply "#{nick} ascends to rank #{i + 1}. Congratulations :)"
- elsif i > old_rank
- m.reply "#{nick} slides down to rank #{i + 1}. So Sorry! NOT. :p"
+ # Print congratulations/condolences if the player's rank has changed
+ unless old_rank.nil?
+ if i < old_rank
+ m.reply "#{nick} ascends to rank #{i + 1}. Congratulations :)"
+ elsif i > old_rank
+ m.reply "#{nick} slides down to rank #{i + 1}. So Sorry! NOT. :p"
+ end
end
else
q.rank_table << [[nick, PlayerStats.new( 1 )]]
end
- debug q.rank_table.inspect
end