remove Standard series, shift IDs down

This commit is contained in:
Justin Edmund 2025-12-15 17:47:23 -08:00
parent 93e3526d1e
commit 244e3f51eb
4 changed files with 50 additions and 55 deletions

View file

@ -99,20 +99,20 @@ class Character < ApplicationRecord
# Mapping from legacy integer values to slugs # Mapping from legacy integer values to slugs
LEGACY_SERIES_TO_SLUG = { LEGACY_SERIES_TO_SLUG = {
1 => 'standard', 1 => 'grand',
2 => 'grand', 2 => 'zodiac',
3 => 'zodiac', 3 => 'promo',
4 => 'promo', 4 => 'collab',
5 => 'collab', 5 => 'eternal',
6 => 'eternal', 6 => 'evoker',
7 => 'evoker', 7 => 'saint',
8 => 'saint', 8 => 'fantasy',
9 => 'fantasy', 9 => 'summer',
10 => 'summer', 10 => 'yukata',
11 => 'yukata', 11 => 'valentine',
12 => 'valentine', 12 => 'halloween',
13 => 'halloween', 13 => 'formal',
14 => 'formal', 14 => 'holiday',
15 => 'event' 15 => 'event'
}.freeze }.freeze

View file

@ -12,7 +12,6 @@ class CharacterSeries < ApplicationRecord
scope :ordered, -> { order(:order) } scope :ordered, -> { order(:order) }
# Slug constants for commonly referenced series # Slug constants for commonly referenced series
STANDARD = 'standard'
GRAND = 'grand' GRAND = 'grand'
ZODIAC = 'zodiac' ZODIAC = 'zodiac'
ETERNAL = 'eternal' ETERNAL = 'eternal'

View file

@ -248,58 +248,55 @@ module Granblue
# Additional series indicators from |obtain= field # Additional series indicators from |obtain= field
obtain = hash['obtain'].to_s.downcase obtain = hash['obtain'].to_s.downcase
series << 2 if obtain.include?('grand') && !series.include?(2) # Grand series << 1 if obtain.include?('grand') && !series.include?(1) # Grand
series << 3 if obtain.include?('zodiac') && !series.include?(3) # Zodiac series << 2 if obtain.include?('zodiac') && !series.include?(2) # Zodiac
# Seasonal series based on page name or obtain field # Seasonal series based on page name or obtain field
page_name = @character.wiki_en.to_s.downcase page_name = @character.wiki_en.to_s.downcase
if page_name.include?('summer') || page_name.include?('(swimsuit)') if page_name.include?('summer') || page_name.include?('(swimsuit)')
series << 10 unless series.include?(10) # Summer series << 9 unless series.include?(9) # Summer
end end
if page_name.include?('yukata') if page_name.include?('yukata')
series << 11 unless series.include?(11) # Yukata series << 10 unless series.include?(10) # Yukata
end end
if page_name.include?('valentine') if page_name.include?('valentine')
series << 12 unless series.include?(12) # Valentine series << 11 unless series.include?(11) # Valentine
end end
if page_name.include?('halloween') if page_name.include?('halloween')
series << 13 unless series.include?(13) # Halloween series << 12 unless series.include?(12) # Halloween
end end
if page_name.include?('(formal)') || page_name.include?('formal ') if page_name.include?('(formal)') || page_name.include?('formal ')
series << 14 unless series.include?(14) # Formal series << 13 unless series.include?(13) # Formal
end end
if page_name.include?('holiday') || page_name.include?('(holiday)') if page_name.include?('holiday') || page_name.include?('(holiday)')
series << 1 unless series.include?(1) # Standard for now, Holiday chars usually just standard series series << 14 unless series.include?(14) # Holiday
end end
# Default to Standard if no series found and character is gacha-available
series << 1 if series.empty? && gacha_available_from_hash(hash)
series.uniq.sort series.uniq.sort
end end
# Extracts season (gacha availability window) from wiki hash # Extracts season (gacha availability window) from wiki hash
# Returns a single season ID based on seasonal indicators # Returns a single season ID based on seasonal indicators, or nil for non-seasonal
def season_from_hash(hash) def season_from_hash(hash)
page_name = @character.wiki_en.to_s.downcase page_name = @character.wiki_en.to_s.downcase
obtain = hash['obtain'].to_s.downcase obtain = hash['obtain'].to_s.downcase
# Check page name for seasonal indicators # Check page name for seasonal indicators
return 2 if page_name.include?('valentine') return 1 if page_name.include?('valentine')
return 3 if page_name.include?('(formal)') || page_name.include?('formal ') return 2 if page_name.include?('(formal)') || page_name.include?('formal ')
return 4 if page_name.include?('summer') || page_name.include?('yukata') || page_name.include?('(swimsuit)') return 3 if page_name.include?('summer') || page_name.include?('yukata') || page_name.include?('(swimsuit)')
return 5 if page_name.include?('halloween') return 4 if page_name.include?('halloween')
return 6 if page_name.include?('holiday') || page_name.include?('(holiday)') return 5 if page_name.include?('holiday') || page_name.include?('(holiday)')
# Check obtain field for seasonal banners # Check obtain field for seasonal banners
return 2 if obtain.include?('valentine') return 1 if obtain.include?('valentine')
return 3 if obtain.include?('formal') return 2 if obtain.include?('formal')
return 4 if obtain.include?('summer') return 3 if obtain.include?('summer')
return 5 if obtain.include?('halloween') return 4 if obtain.include?('halloween')
return 6 if obtain.include?('holiday') return 5 if obtain.include?('holiday')
# Default to Standard for gacha-available characters # Non-seasonal characters have nil season
1 if gacha_available_from_hash(hash) nil
end end
# Determines if character can be pulled from gacha based on obtain field and series # Determines if character can be pulled from gacha based on obtain field and series

View file

@ -79,22 +79,21 @@ module Granblue
# Maps wiki |series= values to CHARACTER_SERIES enum values # Maps wiki |series= values to CHARACTER_SERIES enum values
# Wiki uses lowercase, single values like "grand", "zodiac", etc. # Wiki uses lowercase, single values like "grand", "zodiac", etc.
self.character_series = { self.character_series = {
'normal' => 1, # Standard 'grand' => 1, # Grand
'grand' => 2, # Grand 'zodiac' => 2, # Zodiac
'zodiac' => 3, # Zodiac 'promo' => 3, # Promo
'promo' => 4, # Promo 'collab' => 4, # Collab
'collab' => 5, # Collab 'eternal' => 5, # Eternal
'eternal' => 6, # Eternal 'evoker' => 6, # Evoker
'evoker' => 7, # Evoker 'archangel' => 7, # Saint (Archangels)
'archangel' => 8, # Saint (Archangels) 'fantasy' => 8, # Fantasy
'fantasy' => 9, # Fantasy 'summer' => 9, # Summer
'summer' => 10, # Summer 'yukata' => 10, # Yukata
'yukata' => 11, # Yukata 'valentine' => 11, # Valentine
'valentine' => 12, # Valentine 'halloween' => 12, # Halloween
'halloween' => 13, # Halloween 'formal' => 13, # Formal
'formal' => 14, # Formal 'holiday' => 14, # Holiday
'holiday' => 15, # Holiday 'event' => 15 # Event
'event' => 16 # Event
}.freeze }.freeze
# Maps wiki seasonal indicators to CHARACTER_SEASONS enum values # Maps wiki seasonal indicators to CHARACTER_SEASONS enum values