]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/games/quiz.rb
quiz: autoask status query
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / games / quiz.rb
index aaac24fa32ddafe239f12b0267b1fd5b7dd69921..e1e544f4c9f1b2b244cef94ad7ba21d03db6e877 100644 (file)
@@ -33,9 +33,6 @@ define_structure :QuizBundle, :question, :answer
 define_structure :PlayerStats, :score, :jokers, :jokers_time
 # Why do we still need jokers_time? //Firetech
 
-# Maximum number of jokers a player can gain
-Max_Jokers = 3
-
 # Control codes
 Color = "\003"
 Bold = "\002"
@@ -164,6 +161,11 @@ class QuizPlugin < Plugin
     :default => ['quiz.rbot'],
     :desc => "List of files and URLs that will be used to retrieve quiz questions")
 
+
+  Config.register Config::IntegerValue.new('quiz.max_jokers',
+    :default => 3,
+    :desc => "Maximum number of jokers a player can gain")
+
   def initialize()
     super
 
@@ -283,8 +285,10 @@ class QuizPlugin < Plugin
       jokers = q.registry[nick].jokers
 
       rank = 0
-      q.rank_table.each_index { |rank| break if nick.downcase == q.rank_table[rank][0].downcase }
-      rank += 1
+      q.rank_table.each do |place|
+        rank += 1
+        break if nick.downcase == place[0].downcase
+      end
 
       m.reply "#{nick}'s score is: #{score}    Rank: #{rank}    Jokers: #{jokers}"
     else
@@ -311,45 +315,41 @@ class QuizPlugin < Plugin
       stats = q.registry[nick]
 
       # Find player in table
-      found_player = false
-      i = 0
-      q.rank_table.each_index do |i|
-        if nick.downcase == q.rank_table[i][0].downcase
-          found_player = true
+      old_rank = nil
+      q.rank_table.each_with_index do |place, i|
+        if nick.downcase == place[0].downcase
+          old_rank = i
           break
         end
       end
 
       # Remove player from old position
-      if found_player
-        old_rank = i
-        q.rank_table.delete_at( i )
-      else
-        old_rank = nil
+      if old_rank
+        q.rank_table.delete_at( old_rank )
       end
 
       # Insert player at new position
-      inserted = false
-      q.rank_table.each_index do |i|
-        if stats.score > q.rank_table[i][1].score
+      new_rank = nil
+      q.rank_table.each_with_index do |place, i|
+        if stats.score > place[1].score
           q.rank_table[i,0] = [[nick, stats]]
-          inserted = true
+          new_rank = i
           break
         end
       end
 
       # If less than all other players' scores, append to table
-      unless inserted
-        i += 1 unless q.rank_table.empty?
+      unless new_rank
+        new_rank = q.rank_table.length
         q.rank_table << [nick, stats]
       end
 
       # 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"
+      if old_rank
+        if new_rank < old_rank
+          m.reply "#{nick} ascends to rank #{new_rank + 1}. Congratulations :)"
+        elsif new_rank > old_rank
+          m.reply "#{nick} slides down to rank #{new_rank + 1}. So Sorry! NOT. :p"
         end
       end
     else
@@ -406,7 +406,7 @@ class QuizPlugin < Plugin
       player.score = player.score + points
 
       # Reward player with a joker every X points
-      if player.score % 15 == 0 and player.jokers < Max_Jokers
+      if player.score % 15 == 0 and player.jokers < @bot.config['quiz.max_jokers']
         player.jokers += 1
         m.reply "#{nick} gains a new joker. Rejoice :)"
       end
@@ -735,6 +735,8 @@ class QuizPlugin < Plugin
       return
     end
 
+    params[:enable] ||= 'status'
+
     case params[:enable].downcase
     when "on", "true"
       q.registry_conf["autoask"] = true
@@ -743,8 +745,13 @@ class QuizPlugin < Plugin
     when "off", "false"
       q.registry_conf["autoask"] = false
       m.reply "Disabled autoask mode."
+    when "status"
+      m.reply _("Autoask is %{status}, the delay is %{time}") % {
+        :status => q.registry_conf["autoask"],
+        :time => Utils.secs_to_string(q.registry_conf["autoask_delay"]),
+      }
     else
-      m.reply "Invalid autoask parameter. Use 'on' or 'off'."
+      m.reply "Invalid autoask parameter. Use 'on' or 'off' to set it, 'status' to check the current status."
     end
   end
 
@@ -761,7 +768,6 @@ class QuizPlugin < Plugin
     m.reply "Autoask delay now #{q.registry_conf['autoask_delay']} seconds"
   end
 
-
   def cmd_transfer( m, params )
     chan = m.channel
     q = create_quiz( chan )
@@ -899,7 +905,7 @@ class QuizPlugin < Plugin
     debug q.rank_table.inspect
 
     nick = params[:nick]
-    val = [params[:jokers].to_i, Max_Jokers].min
+    val = [params[:jokers].to_i, @bot.config['quiz.max_jokers']].min
     if q.registry.has_key?(nick)
       player = q.registry[nick]
       player.jokers = val
@@ -967,7 +973,7 @@ plugin.map 'quiz stats',            :action => 'cmd_stats'
 plugin.map 'quiz stop', :action => :stop
 
 # Admin commands
-plugin.map 'quiz autoask :enable',  :action => 'cmd_autoask', :auth_path => 'edit'
+plugin.map 'quiz autoask [:enable]',  :action => 'cmd_autoask', :auth_path => 'edit'
 plugin.map 'quiz autoask delay :time',  :action => 'cmd_autoask_delay', :auth_path => 'edit', :requirements => {:time => /\d+/}
 plugin.map 'quiz transfer :source :dest :score :jokers', :action => 'cmd_transfer', :auth_path => 'edit', :defaults => {:score => '-1', :jokers => '-1'}
 plugin.map 'quiz deleteplayer :nick', :action => 'cmd_del_player', :auth_path => 'edit'