summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2008-04-12 09:53:59 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2008-04-12 09:53:59 +0200
commit2e87853789cc18c6a3450f9c79da32f94920d376 (patch)
treedc21934e3e2dc3a6a31c588c617bf64e6ff11b74
parenteaa48831a6dd8231a79236c9be44e24875cd92c1 (diff)
uno plugin: top scores and wins
-rw-r--r--data/rbot/plugins/games/uno.rb62
1 files changed, 62 insertions, 0 deletions
diff --git a/data/rbot/plugins/games/uno.rb b/data/rbot/plugins/games/uno.rb
index 9b2ee94f..6e602a69 100644
--- a/data/rbot/plugins/games/uno.rb
+++ b/data/rbot/plugins/games/uno.rb
@@ -1057,6 +1057,66 @@ class UnoPlugin < Plugin
:stock => stock.join(' ')
}, :split_at => /#{NormalText}\s*/)
end
+
+ def do_top(m, p)
+ pstats = chan_pstats(m.channel)
+ scores = []
+ wins = []
+ pstats.each do |k, v|
+ wins << [v.won.length, k]
+ scores << [v.won.inject(0) { |s, w| s+=w.score }, k]
+ end
+
+ if n = p[:scorenum]
+ msg = _("%{uno} %{num} highest scores: ") % {
+ :uno => UnoGame::UNO, :num => p[:scorenum]
+ }
+ scores.sort! { |a1, a2| -(a1.first <=> a2.first) }
+ scores = scores[0, n.to_i].compact
+ if scores.length <= 5
+ i = 0
+ list = "\n" + scores.map { |a|
+ i+=1
+ _("%{i}. %{b}%{nick}%{b} with %{b}%{score}%{b} points") % {
+ :i => i, :b => Bold, :nick => a.last, :score => a.first
+ }
+ }.join("\n")
+ else
+ list = scores.map { |a|
+ i+=1
+ _("%{i}. %{nick} ( %{score} )") % {
+ :i => i, :nick => a.last, :score => a.first
+ }
+ }.join(" | ")
+ end
+ elsif n = p[:winnum]
+ msg = _("%{uno} %{num} most wins: ") % {
+ :uno => UnoGame::UNO, :num => p[:winnum]
+ }
+ wins.sort! { |a1, a2| -(a1.first <=> a2.first) }
+ wins = wins[0, n.to_i].compact
+ if wins.length <= 5
+ i = 0
+ list = "\n" + wins.map { |a|
+ i+=1
+ _("%{i}. %{b}%{nick}%{b} with %{b}%{score}%{b} wins") % {
+ :i => i, :b => Bold, :nick => a.last, :score => a.first
+ }
+ }.join("\n")
+ else
+ list = wins.map { |a|
+ i+=1
+ _("%{i}. %{nick} ( %{score} )") % {
+ :i => i, :nick => a.last, :score => a.first
+ }
+ }.join(" | ")
+ end
+ else
+ msg = _("uh, what kind of score list did you want, again?")
+ list = _(" I can only show the top scores (with top) and the most wins (with topwin)")
+ end
+ m.reply msg + list, :max_lines => (msg+list).count("\n")+1
+ end
end
pg = UnoPlugin.new
@@ -1070,6 +1130,8 @@ pg.map 'uno replace :old [with] :new', :private => false, :action => :replace_pl
pg.map 'uno stock', :private => false, :action => :print_stock
pg.map 'uno chanstats', :private => false, :action => :do_chanstats
pg.map 'uno stats [:nick]', :private => false, :action => :do_pstats
+pg.map 'uno top :scorenum', :private => false, :action => :do_top, :defaults => { :scorenum => 5 }
+pg.map 'uno topwin :winnum', :private => false, :action => :do_top, :defaults => { :winnum => 5 }
pg.default_auth('stock', false)
pg.default_auth('end', false)