From dc944b3064b36ea5b92935dd3502da7a7bc04b6c Mon Sep 17 00:00:00 2001 From: Anna Date: Mon, 4 Jul 2022 13:12:20 -0400 Subject: [PATCH] fix: keep old duties around --- server/src/ffxiv.rs | 189 +++++++++++++++++++++++++++++++++++++++++- server/src/listing.rs | 6 +- 2 files changed, 190 insertions(+), 5 deletions(-) diff --git a/server/src/ffxiv.rs b/server/src/ffxiv.rs index 95ff7b3..4945223 100644 --- a/server/src/ffxiv.rs +++ b/server/src/ffxiv.rs @@ -107,6 +107,16 @@ impl LocalisedText { } } +pub fn duty(duty: u32) -> Option<&'static duties::DutyInfo> { + crate::ffxiv::DUTIES.get(&duty) + .or_else(|| old::OLD_DUTIES.get(&duty)) +} + +pub fn roulette(roulette: u32) -> Option<&'static roulettes::RouletteInfo> { + crate::ffxiv::ROULETTES.get(&roulette) + .or_else(|| old::OLD_ROULETTES.get(&roulette)) +} + pub fn duty_name<'a>(duty_type: DutyType, category: DutyCategory, duty: u16, lang: Language) -> Cow<'a, str> { match (duty_type, category) { (DutyType::Other, DutyCategory::Fates) => { @@ -141,12 +151,12 @@ pub fn duty_name<'a>(duty_type: DutyType, category: DutyCategory, duty: u16, lan Language::French => "Pilier des Cieux", }), (DutyType::Normal, _) => { - if let Some(info) = crate::ffxiv::DUTIES.get(&u32::from(duty)) { + if let Some(info) = crate::ffxiv::duty(u32::from(duty)) { return Cow::from(info.name.text(&lang)); } } (DutyType::Roulette, _) => { - if let Some(info) = crate::ffxiv::ROULETTES.get(&u32::from(duty)) { + if let Some(info) = roulette(u32::from(duty)) { return Cow::from(info.name.text(&lang)); } } @@ -164,3 +174,178 @@ pub fn duty_name<'a>(duty_type: DutyType, category: DutyCategory, duty: u16, lan Cow::from(format!("{:?}", category)) } + +mod old { + use std::collections::HashMap; + + use crate::ffxiv::{ + duties::{ContentKind, DutyInfo}, + LocalisedText, + roulettes::RouletteInfo, + }; + + lazy_static::lazy_static! { + pub static ref OLD_DUTIES: HashMap = maplit::hashmap! { + 62 => DutyInfo { + name: LocalisedText { + en: "Cape Westwind", + ja: "リットアティン強襲戦", + de: "Kap Westwind", + fr: "Le Cap Vendouest", + }, + high_end: false, + content_kind: ContentKind::Trials, + }, + 143 => DutyInfo { + name: LocalisedText { + en: "The Feast (4 on 4 - Training)", + ja: "ザ・フィースト (4対4 / カジュアルマッチ)", + de: "The Feast (4 gegen 4, Übungskampf)", + fr: "The Feast (4x4/entraînement)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 145 => DutyInfo { + name: LocalisedText { + en: "The Feast (4 on 4 - Ranked)", + ja: "ザ・フィースト (4対4 / ランクマッチ)", + de: "The Feast (4 gegen 4, gewertet)", + fr: "The Feast (4x4/classé)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 201 => DutyInfo { + name: LocalisedText { + en: "The Feast (Custom Match - Feasting Grounds)", + ja: "ザ・フィースト (ウルヴズジェイル演習場:カスタムマッチ)", + de: "The Feast (Wolfshöhle: Schaukampf)", + fr: "The Feast (personnalisé/Festin des loups)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 228 => DutyInfo { + name: LocalisedText { + en: "The Feast (4 on 4 - Training)", + ja: "ザ・フィースト (4対4 / カジュアルマッチ)", + de: "The Feast (4 gegen 4, Übungskampf)", + fr: "The Feast (4x4/entraînement)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 230 => DutyInfo { + name: LocalisedText { + en: "The Feast (4 on 4 - Ranked)", + ja: "ザ・フィースト (4対4 / ランクマッチ)", + de: "The Feast (4 gegen 4, gewertet)", + fr: "The Feast (4x4/classé)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 233 => DutyInfo { + name: LocalisedText { + en: "The Feast (Custom Match - Lichenweed)", + ja: "ザ・フィースト (ライケンウィード演習場:カスタムマッチ)", + de: "The Feast (Flechtenhain: Schaukampf)", + fr: "The Feast (personnalisé/Pré-de-lichen)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 476 => DutyInfo { + name: LocalisedText { + en: "The Feast (Team Ranked)", + ja: "ザ・フィースト (チーム用ランクマッチ)", + de: "The Feast (Team, gewertet)", + fr: "The Feast (classé/équipe JcJ)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 478 => DutyInfo { + name: LocalisedText { + en: "The Feast (Ranked)", + ja: "ザ・フィースト (ランクマッチ)", + de: "The Feast (gewertet)", + fr: "The Feast (classé)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 479 => DutyInfo { + name: LocalisedText { + en: "The Feast (Training)", + ja: "ザ・フィースト (カジュアルマッチ)", + de: "The Feast (Übungskampf)", + fr: "The Feast (entraînement)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 480 => DutyInfo { + name: LocalisedText { + en: "The Feast (Custom Match - Crystal Tower)", + ja: "ザ・フィースト (クリスタルタワー演習場:カスタムマッチ)", + de: "The Feast (Kristallturm-Arena: Schaukampf)", + fr: "The Feast (personnalisé/Tour de Cristal)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 580 => DutyInfo { + name: LocalisedText { + en: "The Feast (Team Custom Match - Crystal Tower)", + ja: "ザ・フィースト (クリスタルタワー演習場:チーム用カスタムマッチ)", + de: "The Feast (Kristallturm-Arena: Team-Schaukampf) ", + fr: "The Feast (personnalisé/équipe JcJ/Tour de Cristal)", + }, + high_end: false, + content_kind: ContentKind::PvP, + }, + 776 => DutyInfo { + name: LocalisedText { + en: "The Whorleater (Unreal)", + ja: "幻リヴァイアサン討滅戦", + de: "Traumprüfung - Leviathan", + fr: "Le Briseur de marées (irréel)", + }, + high_end: true, + content_kind: ContentKind::Trials, + }, + }; + + pub static ref OLD_ROULETTES: HashMap = maplit::hashmap! { + 11 => RouletteInfo { + name: LocalisedText { + en: "The Feast (Training Match)", + ja: "ザ・フィースト (カジュアルマッチ)", + de: "The Feast (Übungskampf)", + fr: "The Feast (entraînement)", + }, + pvp: true, + }, + 13 => RouletteInfo { + name: LocalisedText { + en: "The Feast (Ranked Match)", + ja: "ザ・フィースト (ランクマッチ)", + de: "The Feast (gewertet)", + fr: "The Feast (classé)", + }, + pvp: true, + }, + 16 => RouletteInfo { + name: LocalisedText { + en: "The Feast (Team Ranked Match)", + ja: "ザ・フィースト (チーム用ランクマッチ)", + de: "The Feast (Team, gewertet)", + fr: "The Feast (classé/équipe JcJ)", + }, + pvp: true, + }, + }; + } +} diff --git a/server/src/listing.rs b/server/src/listing.rs index ca7eb26..15a32cc 100644 --- a/server/src/listing.rs +++ b/server/src/listing.rs @@ -134,7 +134,7 @@ impl PartyFinderListing { return false; } - crate::ffxiv::DUTIES.get(&u32::from(self.duty)) + crate::ffxiv::duty(u32::from(self.duty)) .map(|info| info.high_end) .unwrap_or_default() } @@ -144,14 +144,14 @@ impl PartyFinderListing { return 0; } - crate::ffxiv::DUTIES.get(&u32::from(self.duty)) + crate::ffxiv::duty(u32::from(self.duty)) .map(|info| info.content_kind.as_u32()) .unwrap_or_default() } pub fn pf_category(&self) -> Option { let duty_type = self.duty_type; - let duty_info = crate::ffxiv::DUTIES.get(&u32::from(self.duty)); + let duty_info = crate::ffxiv::duty(u32::from(self.duty)); let duty_category = self.category; let category = match (duty_type, duty_info, duty_category) {