Compare commits
4 commits
cd28c26ae7
...
bbd1849e19
Author | SHA1 | Date | |
---|---|---|---|
bbd1849e19 | |||
598a9dac52 | |||
9f536f81b3 | |||
77f01a6cb9 |
4 changed files with 55 additions and 47 deletions
|
@ -13,7 +13,7 @@ class ItemsController < ApplicationController
|
|||
|
||||
@items = @query.results.paginate(
|
||||
page: params[:page], per_page: per_page)
|
||||
assign_closeted!
|
||||
assign_closeted!(@items)
|
||||
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
|
@ -54,7 +54,7 @@ class ItemsController < ApplicationController
|
|||
end
|
||||
elsif params.has_key?(:ids) && params[:ids].is_a?(Array)
|
||||
@items = Item.find(params[:ids])
|
||||
assign_closeted!
|
||||
assign_closeted!(@items)
|
||||
respond_to do |format|
|
||||
format.json { render json: @items }
|
||||
end
|
||||
|
@ -104,7 +104,7 @@ class ItemsController < ApplicationController
|
|||
end
|
||||
|
||||
@items = @pet_type.needed_items.order(:name)
|
||||
assign_closeted!
|
||||
assign_closeted!(@items)
|
||||
|
||||
respond_to do |format|
|
||||
format.html { @pet_name = params[:name] ; render :layout => 'application' }
|
||||
|
@ -113,12 +113,15 @@ class ItemsController < ApplicationController
|
|||
end
|
||||
|
||||
def sources
|
||||
# Load all the items, then group them by source.
|
||||
item_ids = params[:ids].split(",")
|
||||
@items = Item.where(id: item_ids).includes(:nc_mall_record).
|
||||
@all_items = Item.where(id: item_ids).includes(:nc_mall_record).
|
||||
includes(:dyeworks_base_item).order(:name).limit(50)
|
||||
assign_closeted!
|
||||
@items = @all_items.group_by(&:source).tap { |i| i.default = [] }
|
||||
|
||||
if @items.empty?
|
||||
assign_closeted!(@all_items)
|
||||
|
||||
if @all_items.empty?
|
||||
render file: "public/404.html", status: :not_found, layout: nil
|
||||
return
|
||||
end
|
||||
|
@ -126,23 +129,14 @@ class ItemsController < ApplicationController
|
|||
# For Dyeworks items whose base is currently in the NC Mall, preload their
|
||||
# trade values. We'll use this to determine which ones are fully buyable rn
|
||||
# (because Owls tracks this data and we don't).
|
||||
Item.preload_nc_trade_values(@items.select(&:dyeworks_base_buyable?))
|
||||
|
||||
# Group the items by category!
|
||||
@nc_mall_items = @items.select(&:currently_in_mall?).
|
||||
reject(&:dyeworks_buyable?)
|
||||
@buyable_dyeworks_items = @items.select(&:dyeworks_buyable?)
|
||||
@np_items = @items.select(&:np?)
|
||||
@pb_items = @items.select(&:pb?)
|
||||
@other_nc_items = @items.select(&:nc?).reject(&:currently_in_mall?).
|
||||
reject(&:dyeworks_buyable?)
|
||||
Item.preload_nc_trade_values(@items[:dyeworks])
|
||||
|
||||
# Start loading the NC trade values for the non-Mall NC items.
|
||||
trade_values_task = Async { Item.preload_nc_trade_values(@other_nc_items) }
|
||||
trade_values_task = Async { Item.preload_nc_trade_values(@items[:other_nc]) }
|
||||
|
||||
# Also, PB items have some special handling: we group them by color, then
|
||||
# load example pet types for the colors that don't have paint brushes.
|
||||
@pb_items_by_color = @pb_items.group_by(&:pb_color).
|
||||
@pb_items_by_color = @items[:pb].group_by(&:pb_color).
|
||||
sort_by { |color, items| color&.name }.to_h
|
||||
|
||||
colors_without_thumbnails = @pb_items_by_color.keys.
|
||||
|
@ -158,11 +152,7 @@ class ItemsController < ApplicationController
|
|||
|
||||
# Create a second value that only include the items the user *needs*: that
|
||||
# is, that they don't already own.
|
||||
@nc_mall_items_needed = @nc_mall_items.reject(&:owned?)
|
||||
@buyable_dyeworks_items_needed = @buyable_dyeworks_items.reject(&:owned?)
|
||||
@np_items_needed = @np_items.reject(&:owned?)
|
||||
@pb_items_needed = @pb_items.reject(&:owned?)
|
||||
@other_nc_items_needed = @other_nc_items.reject(&:owned?)
|
||||
@items_needed = @items.transform_values { |items| items.reject(&:owned?) }
|
||||
@pb_items_needed_by_color =
|
||||
@pb_items_by_color.transform_values { |items| items.reject(&:owned?) }
|
||||
|
||||
|
@ -174,8 +164,8 @@ class ItemsController < ApplicationController
|
|||
|
||||
protected
|
||||
|
||||
def assign_closeted!
|
||||
current_user.assign_closeted_to_items!(@items) if user_signed_in?
|
||||
def assign_closeted!(items)
|
||||
current_user.assign_closeted_to_items!(items) if user_signed_in?
|
||||
end
|
||||
|
||||
def load_appearances
|
||||
|
|
|
@ -234,6 +234,7 @@ module ItemsHelper
|
|||
num_items = 0
|
||||
end
|
||||
|
||||
summaries << "0 NC" if summaries.empty?
|
||||
summary = summaries.join(", ")
|
||||
|
||||
{nc_total:, summary:}
|
||||
|
|
|
@ -213,6 +213,7 @@ class Item < ApplicationRecord
|
|||
# Mall at any time, rather than as part of a limited-time event. (Owls tracks
|
||||
# this, not us!)
|
||||
def dyeworks_permanent?
|
||||
return false if nc_trade_value.nil?
|
||||
nc_trade_value.value_text.include?("Permanent Dyeworks")
|
||||
end
|
||||
|
||||
|
@ -240,6 +241,22 @@ class Item < ApplicationRecord
|
|||
Item.find_by_name(name_match["base"])
|
||||
end
|
||||
|
||||
def source
|
||||
if dyeworks_buyable?
|
||||
:dyeworks
|
||||
elsif currently_in_mall?
|
||||
:nc_mall
|
||||
elsif nc?
|
||||
:other_nc
|
||||
elsif np?
|
||||
:np
|
||||
elsif pb?
|
||||
:pb
|
||||
else
|
||||
raise "Item has no matching source (should not happen?)"
|
||||
end
|
||||
end
|
||||
|
||||
def owned?
|
||||
@owned || false
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- title "Item Getting Guide"
|
||||
%h1#title Item Getting Guide
|
||||
|
||||
- if @nc_mall_items.present?
|
||||
- if @items[:nc_mall].present?
|
||||
%h2 NC Mall items
|
||||
:markdown
|
||||
These items are available in the NC Mall right now! You can buy them
|
||||
|
@ -16,22 +16,22 @@
|
|||
%tr
|
||||
%td
|
||||
%th
|
||||
Total: #{nc_total_for @nc_mall_items_needed} NC
|
||||
(#{pluralize @nc_mall_items_needed.size, "item"})
|
||||
|
||||
Total: #{nc_total_for @items_needed[:nc_mall]} NC
|
||||
(#{pluralize @items_needed[:nc_mall].size, "item"})
|
||||
|
||||
%td.actions-cell
|
||||
- if @nc_mall_items_needed.present?
|
||||
- if @items_needed[:nc_mall].present?
|
||||
%button{onclick: "alert('Todo!')"}
|
||||
= cart_icon alt: ""
|
||||
Buy all in NC Mall
|
||||
%tbody
|
||||
- @nc_mall_items.each do |item|
|
||||
- @items[:nc_mall].each do |item|
|
||||
= render "item_list_row", item: do
|
||||
%button{onclick: "alert('Todo!')"}
|
||||
= cart_icon alt: ""
|
||||
Buy (#{item.current_nc_price} NC)
|
||||
|
||||
- if @buyable_dyeworks_items.present?
|
||||
- if @items[:dyeworks].present?
|
||||
%h2 Dyeworks items
|
||||
:markdown
|
||||
These are recolored "Dyeworks" variants of items. First get the "base"
|
||||
|
@ -48,24 +48,24 @@
|
|||
= image_tag "https://images.neopets.com/items/mall_80x80_cleaning.gif",
|
||||
alt: "Dyeworks Hue Brew Potion"
|
||||
%th
|
||||
Total: #{dyeworks_nc_total_for @buyable_dyeworks_items_needed} NC
|
||||
Total: #{dyeworks_nc_total_for @items_needed[:dyeworks]} NC
|
||||
= surround "(", ")" do
|
||||
%span.price-breakdown{
|
||||
title: "#{dyeworks_items_nc_total_for(@buyable_dyeworks_items_needed)} NC"
|
||||
title: "#{dyeworks_items_nc_total_for(@items_needed[:dyeworks])} NC"
|
||||
}<
|
||||
#{pluralize @buyable_dyeworks_items_needed.size, "item"}
|
||||
#{pluralize @items_needed[:dyeworks].size, "item"}
|
||||
+
|
||||
%span.price-breakdown{
|
||||
title: dyeworks_potions_nc_summary(@buyable_dyeworks_items_needed.size)
|
||||
title: dyeworks_potions_nc_summary(@items_needed[:dyeworks].size)
|
||||
}<
|
||||
#{pluralize @buyable_dyeworks_items_needed.size, "potion"}
|
||||
#{pluralize @items_needed[:dyeworks].size, "potion"}
|
||||
%td.actions-cell
|
||||
- if @buyable_dyeworks_items_needed.present?
|
||||
- if @items_needed[:dyeworks].present?
|
||||
%button{onclick: "alert('Todo!')"}
|
||||
= cart_icon alt: ""
|
||||
Buy all in NC Mall
|
||||
%tbody
|
||||
- @buyable_dyeworks_items.each do |item|
|
||||
- @items[:dyeworks].each do |item|
|
||||
= render "item_list_row", item: do
|
||||
- base_item = item.dyeworks_base_item
|
||||
|
||||
|
@ -85,7 +85,7 @@
|
|||
= cart_icon alt: ""
|
||||
Buy base (#{item.dyeworks_base_item.current_nc_price} NC)
|
||||
|
||||
- if @np_items.present?
|
||||
- if @items[:np].present?
|
||||
%h2 Neopoint items
|
||||
:markdown
|
||||
These items can be purchased with Neopoints. For less-expensive items,
|
||||
|
@ -102,16 +102,16 @@
|
|||
%tr
|
||||
%td
|
||||
%th{colspan: 2}
|
||||
Total: #{pluralize @np_items_needed.size, "item"}
|
||||
Total: #{pluralize @items_needed[:np].size, "item"}
|
||||
%tbody
|
||||
- @np_items.each do |item|
|
||||
- @items[:np].each do |item|
|
||||
= render "item_list_row", item: do
|
||||
= button_link_to "Shops", shop_wizard_url_for(item),
|
||||
target: "_blank", icon: search_icon
|
||||
= button_link_to "Trades", trading_post_url_for(item),
|
||||
target: "_blank", icon: search_icon
|
||||
|
||||
- if @pb_items.present?
|
||||
- if @pb_items_by_color.present?
|
||||
%h2 Paint Brush items
|
||||
:markdown
|
||||
These items are part of a paint brush set. Once you paint your pet,
|
||||
|
@ -162,7 +162,7 @@
|
|||
- items.each do |item|
|
||||
= render "item_list_row", item:
|
||||
|
||||
- if @other_nc_items.present?
|
||||
- if @items[:other_nc].present?
|
||||
%h2 Neocash items (Capsules, events, retired, etc.)
|
||||
:markdown
|
||||
These items are part of the Neocash economy, but not directly for sale.
|
||||
|
@ -172,7 +172,7 @@
|
|||
|
||||
[mall]: https://ncmall.neopets.com/
|
||||
|
||||
- if @other_nc_items.any?(&:nc_trade_value)
|
||||
- if @items[:other_nc].any?(&:nc_trade_value)
|
||||
:markdown
|
||||
The [Owls Value Guide][owls] often has more details about how to get
|
||||
these items, and how much they're usually worth in the NC Trading
|
||||
|
@ -184,9 +184,9 @@
|
|||
%thead
|
||||
%td
|
||||
%th{colspan: 2}
|
||||
Total: #{pluralize @other_nc_items_needed.size, "item"}
|
||||
Total: #{pluralize @items_needed[:other_nc].size, "item"}
|
||||
%tbody
|
||||
- @other_nc_items.each do |item|
|
||||
- @items[:other_nc].each do |item|
|
||||
= render "item_list_row", item: do
|
||||
- content_for :subtitle, flush: true do
|
||||
- if item.nc_trade_value.present?
|
||||
|
|
Loading…
Reference in a new issue