module Natural20::RogueBuilder

Public Instance Methods

rogue_builder(_build_values) click to toggle source
# File lib/natural_20/cli/builder/rogue_builder.rb, line 2
def rogue_builder(_build_values)
  @class_values ||= {
    attributes: [],
    saving_throw_proficiencies: %w[dexterity intelligence],
    equipped: %w[leather dagger dagger],
    inventory: [],
    tools: ['thieves_tools'],
    expertise: []
  }

  @class_values[:expertise] = prompt.multi_select(t('builder.rogue.expertise'), min: 2, max: 2) do |q|
    @values[:skills].each do |skill|
      q.choice t("builder.skill.#{skill}"), skill
    end
    q.choice t('builder.skill.thieves_tools'), 'thieves_tools'
  end

  starting_equipment = []
  starting_equipment << prompt.select(t('builder.rogue.select_starting_weapon')) do |q|
    q.choice t('object.rapier'), :rapier
    q.choice t('object.shortsword'), :shortsword
  end

  starting_equipment << prompt.select(t('builder.rogue.select_starting_weapon_2')) do |q|
    q.choice t('object.shortbow_and_quiver'), :shortbow_and_quiver
    q.choice t('object.shortsword'), :shortsword
  end

  starting_equipment.each do |equip|
    case equip
    when :rapier
      @class_values[:inventory] << {
        qty: 1,
        type: 'rapier'
      }
    when :shortbow_and_quiver
      @class_values[:inventory] += [{
        type: 'shortbow',
        qty: 1
      },
                                    {
                                      type: 'arrows',
                                      qty: 20
                                    }]
    end
  end

  shortswords = starting_equipment.select { |a| a == :shortword }.size
  if shortswords > 0
    @class_values[:inventory] << {
      type: 'shortsword',
      qty: shortswords
    }
  end

  result = Natural20::DieRoll.parse(@class_properties[:hit_die])
  @values[:max_hp] = result.die_count * result.die_type.to_i + modifier_table(@values.dig(:ability, :con))

  @class_values
end