summaryrefslogtreecommitdiff
path: root/app/controllers/game_controller.rb
blob: 4e5592479dad625d37d28016732813b938cb8438 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class GameController < ApplicationController
  def finish_activity
    @results = []
    return unless current_char.activity_time_remaining <= 0
    current_char.update(activity_started_at: Time.now)

    current_char.activity.whatnot[:results].each do |result|
      type = result[:type]
      case type
      when "item"
        next if rand > result[:chance]
        table_roll = rand

        result[:table].sort_by { |_, v| -v[:score] }.each do |item_gid, item_data|
          quantity = item_data[:quantity] || 1
          if table_roll >= item_data[:score]
            item = Item.find_by_gid(item_gid)
            xp_awards = {}
            if item.whatnot && item.whatnot.key?(:xp_value)
              xp_awards = item.whatnot[:xp_value]
                              .map { |gid, amount| { skill: Skill.find_by_gid(gid.to_s), amount: amount } }
              xp_awards.each do |award|
                current_char.add_skill_xp(award[:skill], award[:amount])
              end
            end
            current_char.shift_item(item_gid, quantity)
            @results.push({ type: type, item: Item.find_by_gid(item_gid), quantity: quantity,
                            xp: xp_awards })
            break
          end
        end
      else
        raise "Invalid result type (#{type})" # TODO: Improve this.
      end
    end
  end
end