From 3dcbc71d3bd99da9342a3973f007734ca0ee3db3 Mon Sep 17 00:00:00 2001 From: wormtql <584130248@qq.com> Date: Wed, 17 Jul 2024 21:23:54 +0800 Subject: [PATCH] feat: Add 4.8 items --- mona_core/src/attribute/attribute.rs | 56 +++- mona_core/src/attribute/attribute_name.rs | 91 ++++--- .../attribute/complicated_attribute_graph.rs | 11 +- mona_core/src/character/character_name.rs | 1 + .../src/character/characters/dendro/emilie.rs | 250 ++++++++++++++++++ .../src/character/characters/dendro/mod.rs | 2 + mona_core/src/character/skill_config.rs | 1 + mona_core/src/common/skill_type.rs | 1 + .../src/damage/complicated_damage_builder.rs | 54 ++-- .../target_functions/target_function_name.rs | 1 + .../target_functions/dendro/emilie_default.rs | 72 +++++ .../target_functions/dendro/mod.rs | 8 +- mona_core/src/weapon/weapon_config.rs | 1 + mona_core/src/weapon/weapon_name.rs | 1 + .../weapons/polearms/lumidouce_elegy.rs | 63 +++++ mona_core/src/weapon/weapons/polearms/mod.rs | 2 + mona_wasm/Cargo.lock | 32 ++- mona_wasm/Cargo.toml | 2 +- package.json | 2 +- src/images/characters/Emilie_splash.png | Bin 0 -> 73294 bytes .../NewArtifactPlanPage.vue | 14 +- 21 files changed, 574 insertions(+), 91 deletions(-) create mode 100644 mona_core/src/character/characters/dendro/emilie.rs create mode 100644 mona_core/src/target_functions/target_functions/dendro/emilie_default.rs create mode 100644 mona_core/src/weapon/weapons/polearms/lumidouce_elegy.rs create mode 100644 src/images/characters/Emilie_splash.png diff --git a/mona_core/src/attribute/attribute.rs b/mona_core/src/attribute/attribute.rs index 03a703c8..81944ad2 100644 --- a/mona_core/src/attribute/attribute.rs +++ b/mona_core/src/attribute/attribute.rs @@ -112,40 +112,70 @@ impl AttributeCommon for T { let key1 = AttributeName::atk_ratio_name_by_element(element); let key2 = AttributeName::atk_ratio_name_by_skill_type(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + self.get_value(AttributeName::ATKRatioBase) - + self.get_value(key1) + self.get_value(key2) + + self.get_value(key1) + value2 } fn get_def_ratio(&self, element: Element, skill: SkillType) -> f64 { let key1 = AttributeName::def_ratio_name_by_element(element); let key2 = AttributeName::def_ratio_name_by_skill_type(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + self.get_value(AttributeName::DEFRatioBase) - + self.get_value(key1) + self.get_value(key2) + + self.get_value(key1) + value2 } fn get_hp_ratio(&self, element: Element, skill: SkillType) -> f64 { let key1 = AttributeName::hp_ratio_name_by_element(element); let key2 = AttributeName::hp_ratio_name_by_skill_type(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + self.get_value(AttributeName::HPRatioBase) - + self.get_value(key1) + self.get_value(key2) + + self.get_value(key1) + value2 } fn get_extra_damage(&self, element: Element, skill: SkillType) -> f64 { let key1 = AttributeName::extra_dmg_name_by_element(element); let key2 = AttributeName::extra_dmg_name_by_skill_type(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + self.get_value(AttributeName::ExtraDmgBase) - + self.get_value(key1) + self.get_value(key2) + + self.get_value(key1) + value2 } fn get_bonus(&self, element: Element, skill: SkillType) -> f64 { let key1 = AttributeName::bonus_name_by_element(element); let key2 = AttributeName::bonus_name_by_skill_type(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + let mut temp = self.get_value(AttributeName::BonusBase) - + self.get_value(key1) + self.get_value(key2); + + self.get_value(key1) + value2; // todo refactor if element != Element::Physical && skill == SkillType::NormalAttack { temp += self.get_value(AttributeName::BonusNormalAndElemental); @@ -157,16 +187,28 @@ impl AttributeCommon for T { let key1 = AttributeName::critical_rate_name_by_element(element); let key2 = AttributeName::critical_rate_name_by_skill_type(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + self.get_value(AttributeName::CriticalBase) + self.get_value(AttributeName::CriticalAttacking) - + self.get_value(key1) + self.get_value(key2) + + self.get_value(key1) + value2 } fn get_critical_damage(&self, element: Element, skill: SkillType) -> f64 { let key1 = AttributeName::critical_damage_name_by_element(element); let key2 = AttributeName::critical_damage_name_by_skill_name(skill); + let value2 = if let Some(name) = key2 { + self.get_value(name) + } else { + 0.0 + }; + self.get_value(AttributeName::CriticalDamageBase) - + self.get_value(key1) + self.get_value(key2) + + self.get_value(key1) + value2 } fn get_enemy_res_minus(&self, element: Element, _skill: SkillType) -> f64 { diff --git a/mona_core/src/attribute/attribute_name.rs b/mona_core/src/attribute/attribute_name.rs index ebc05851..47a814da 100644 --- a/mona_core/src/attribute/attribute_name.rs +++ b/mona_core/src/attribute/attribute_name.rs @@ -189,13 +189,14 @@ impl AttributeName { } } - pub fn bonus_name_by_skill_type(skill_type: SkillType) -> AttributeName { + pub fn bonus_name_by_skill_type(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::BonusNormalAttack, - SkillType::ChargedAttack => AttributeName::BonusChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::BonusPlungingAttack, - SkillType::ElementalSkill => AttributeName::BonusElementalSkill, - SkillType::ElementalBurst => AttributeName::BonusElementalBurst, + SkillType::NormalAttack => Some(AttributeName::BonusNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::BonusChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::BonusPlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::BonusElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::BonusElementalBurst), + SkillType::NoneType => None, } } @@ -212,13 +213,14 @@ impl AttributeName { } } - pub fn critical_rate_name_by_skill_type(skill_type: SkillType) -> AttributeName { + pub fn critical_rate_name_by_skill_type(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::CriticalNormalAttack, - SkillType::ChargedAttack => AttributeName::CriticalChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::CriticalPlungingAttack, - SkillType::ElementalSkill => AttributeName::CriticalElementalSkill, - SkillType::ElementalBurst => AttributeName::CriticalElementalBurst, + SkillType::NormalAttack => Some(AttributeName::CriticalNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::CriticalChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::CriticalPlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::CriticalElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::CriticalElementalBurst), + SkillType::NoneType => None, } } @@ -235,13 +237,14 @@ impl AttributeName { } } - pub fn critical_damage_name_by_skill_name(skill_type: SkillType) -> AttributeName { + pub fn critical_damage_name_by_skill_name(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::CriticalDamageNormalAttack, - SkillType::ChargedAttack => AttributeName::CriticalDamageChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::CriticalDamagePlungingAttack, - SkillType::ElementalSkill => AttributeName::CriticalDamageElementalSkill, - SkillType::ElementalBurst => AttributeName::CriticalDamageElementalBurst, + SkillType::NormalAttack => Some(AttributeName::CriticalDamageNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::CriticalDamageChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::CriticalDamagePlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::CriticalDamageElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::CriticalDamageElementalBurst), + SkillType::NoneType => None, } } @@ -258,13 +261,14 @@ impl AttributeName { } } - pub fn hp_ratio_name_by_skill_type(skill_type: SkillType) -> AttributeName { + pub fn hp_ratio_name_by_skill_type(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::HPRatioNormalAttack, - SkillType::ChargedAttack => AttributeName::HPRatioChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::HPRatioPlungingAttack, - SkillType::ElementalSkill => AttributeName::HPRatioElementalSkill, - SkillType::ElementalBurst => AttributeName::HPRatioElementalBurst, + SkillType::NormalAttack => Some(AttributeName::HPRatioNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::HPRatioChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::HPRatioPlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::HPRatioElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::HPRatioElementalBurst), + SkillType::NoneType => None, } } @@ -281,13 +285,14 @@ impl AttributeName { } } - pub fn def_ratio_name_by_skill_type(skill_type: SkillType) -> AttributeName { + pub fn def_ratio_name_by_skill_type(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::DEFRatioNormalAttack, - SkillType::ChargedAttack => AttributeName::DEFRatioChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::DEFRatioPlungingAttack, - SkillType::ElementalSkill => AttributeName::DEFRatioElementalSkill, - SkillType::ElementalBurst => AttributeName::DEFRatioElementalBurst, + SkillType::NormalAttack => Some(AttributeName::DEFRatioNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::DEFRatioChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::DEFRatioPlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::DEFRatioElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::DEFRatioElementalBurst), + SkillType::NoneType => None, } } @@ -304,13 +309,14 @@ impl AttributeName { } } - pub fn atk_ratio_name_by_skill_type(skill_type: SkillType) -> AttributeName { + pub fn atk_ratio_name_by_skill_type(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::ATKRatioNormalAttack, - SkillType::ChargedAttack => AttributeName::ATKRatioChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::ATKRatioPlungingAttack, - SkillType::ElementalSkill => AttributeName::ATKRatioElementalSkill, - SkillType::ElementalBurst => AttributeName::ATKRatioElementalBurst, + SkillType::NormalAttack => Some(AttributeName::ATKRatioNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::ATKRatioChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::ATKRatioPlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::ATKRatioElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::ATKRatioElementalBurst), + SkillType::NoneType => None, } } @@ -327,13 +333,14 @@ impl AttributeName { } } - pub fn extra_dmg_name_by_skill_type(skill_type: SkillType) -> AttributeName { + pub fn extra_dmg_name_by_skill_type(skill_type: SkillType) -> Option { match skill_type { - SkillType::NormalAttack => AttributeName::ExtraDmgNormalAttack, - SkillType::ChargedAttack => AttributeName::ExtraDmgChargedAttack, - SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => AttributeName::ExtraDmgPlungingAttack, - SkillType::ElementalSkill => AttributeName::ExtraDmgElementalSkill, - SkillType::ElementalBurst => AttributeName::ExtraDmgElementalBurst, + SkillType::NormalAttack => Some(AttributeName::ExtraDmgNormalAttack), + SkillType::ChargedAttack => Some(AttributeName::ExtraDmgChargedAttack), + SkillType::PlungingAttackOnGround | SkillType::PlungingAttackInAction => Some(AttributeName::ExtraDmgPlungingAttack), + SkillType::ElementalSkill => Some(AttributeName::ExtraDmgElementalSkill), + SkillType::ElementalBurst => Some(AttributeName::ExtraDmgElementalBurst), + SkillType::NoneType => None, } } diff --git a/mona_core/src/attribute/complicated_attribute_graph.rs b/mona_core/src/attribute/complicated_attribute_graph.rs index 60d95074..eec24d55 100644 --- a/mona_core/src/attribute/complicated_attribute_graph.rs +++ b/mona_core/src/attribute/complicated_attribute_graph.rs @@ -191,11 +191,16 @@ impl ComplicatedAttributeGraph { } pub fn get_critical_composition(&self, element: Element, skill: SkillType) -> EntryType { - self.get_composition_merge(&vec![ + let skill_type_critical_name = AttributeName::critical_rate_name_by_skill_type(skill); + let mut names = vec![ AttributeName::CriticalBase, AttributeName::CriticalAttacking, AttributeName::critical_rate_name_by_element(element), - AttributeName::critical_rate_name_by_skill_type(skill) - ]) + ]; + if let Some(name) = skill_type_critical_name { + names.push(name); + } + + self.get_composition_merge(&names) } } \ No newline at end of file diff --git a/mona_core/src/character/character_name.rs b/mona_core/src/character/character_name.rs index 71a7e0d2..76bb60c9 100644 --- a/mona_core/src/character/character_name.rs +++ b/mona_core/src/character/character_name.rs @@ -111,4 +111,5 @@ pub enum CharacterName { Clorinde, Sigewinne, Sethos, + Emilie, } \ No newline at end of file diff --git a/mona_core/src/character/characters/dendro/emilie.rs b/mona_core/src/character/characters/dendro/emilie.rs new file mode 100644 index 00000000..dcb5e6bf --- /dev/null +++ b/mona_core/src/character/characters/dendro/emilie.rs @@ -0,0 +1,250 @@ +use crate::{attribute::Attribute, character::macros::damage_enum, common::ChangeAttribute, attribute::AttributeCommon}; +use crate::attribute::AttributeName; +use crate::character::{CharacterConfig, CharacterName, CharacterStaticData}; +use crate::character::character_common_data::CharacterCommonData; +use crate::character::character_sub_stat::CharacterSubStatFamily; +use crate::character::characters::kirara::KiraraDamageEnum; +use crate::character::characters::kirara::KiraraDamageEnum::{Plunging1, Plunging2, Plunging3}; +use crate::character::macros::{damage_ratio, skill_map, skill_type}; +use crate::character::skill_config::CharacterSkillConfig; +use crate::character::traits::{CharacterSkillMap, CharacterTrait}; +use crate::common::{Element, SkillType, WeaponType}; +use crate::common::i18n::{charged_dmg, hit_n_dmg, plunging_dmg}; +use crate::common::i18n::locale; +use crate::common::item_config_type::{ItemConfig, ItemConfigType}; +use crate::damage::damage_builder::DamageBuilder; +use crate::damage::DamageContext; +use crate::target_functions::TargetFunction; +use crate::team::TeamQuantization; +use crate::weapon::weapon_common_data::WeaponCommonData; +use crate::character::traits::{CharacterSkillMapItem}; + +pub struct EmilieSkillType { + pub normal_dmg1: [f64; 15], + pub normal_dmg2: [f64; 15], + pub normal_dmg3: [f64; 15], + pub normal_dmg4: [f64; 15], + pub charged_dmg: [f64; 15], + pub plunging_dmg1: [f64; 15], + pub plunging_dmg2: [f64; 15], + pub plunging_dmg3: [f64; 15], + + pub e_dmg1: [f64; 15], + pub e_dmg2: [f64; 15], + pub e_dmg3: [f64; 15], + pub e_dmg4: [f64; 15], + + pub q_dmg1: [f64; 15], +} + +pub const EMILIE_SKILL: EmilieSkillType = EmilieSkillType { + normal_dmg1: [0.4856, 0.5251, 0.5647, 0.6211, 0.6607, 0.7058, 0.7679, 0.8301, 0.8922, 0.9599, 1.0277, 1.0954, 1.1632, 1.231, 1.2987], + normal_dmg2: [0.449, 0.4855, 0.522, 0.5742, 0.6108, 0.6526, 0.71, 0.7674, 0.8248, 0.8875, 0.9501, 1.0128, 1.0754, 1.138, 1.2007], + normal_dmg3: [0.593, 0.6413, 0.6895, 0.7585, 0.8068, 0.8619, 0.9378, 1.0136, 1.0895, 1.1722, 1.255, 1.3377, 1.4205, 1.5032, 1.5859], + normal_dmg4: [0.751, 0.8122, 0.8733, 0.9606, 1.0217, 1.0916, 1.1877, 1.2837, 1.3798, 1.4846, 1.5894, 1.6942, 1.799, 1.9038, 2.0086], + charged_dmg: [0.9133, 0.9877, 1.062, 1.1682, 1.2425, 1.3275, 1.4443, 1.5611, 1.678, 1.8054, 1.9328, 2.0603, 2.1877, 2.3152, 2.4426], + plunging_dmg1: [0.6393, 0.6914, 0.7434, 0.8177, 0.8698, 0.9293, 1.011, 1.0928, 1.1746, 1.2638, 1.353, 1.4422, 1.5314, 1.6206, 1.7098], + plunging_dmg2: [1.2784, 1.3824, 1.4865, 1.6351, 1.7392, 1.8581, 2.0216, 2.1851, 2.3486, 2.527, 2.7054, 2.8838, 3.0622, 3.2405, 3.4189], + plunging_dmg3: [1.5968, 1.7267, 1.8567, 2.0424, 2.1723, 2.3209, 2.5251, 2.7293, 2.9336, 3.1564, 3.3792, 3.602, 3.8248, 4.0476, 4.2704], + e_dmg1: [0.4708, 0.5061, 0.5414, 0.5885, 0.6238, 0.6591, 0.7062, 0.7533, 0.8004, 0.8474, 0.8945, 0.9416, 1.0005, 1.0593, 1.1182], + e_dmg2: [0.396, 0.4257, 0.4554, 0.495, 0.5247, 0.5544, 0.594, 0.6336, 0.6732, 0.7128, 0.7524, 0.792, 0.8415, 0.891, 0.9405], + e_dmg3: [0.84, 0.903, 0.966, 1.05, 1.113, 1.176, 1.26, 1.344, 1.428, 1.512, 1.596, 1.68, 1.785, 1.89, 1.995], + e_dmg4: [0.3852, 0.4141, 0.443, 0.4815, 0.5104, 0.5393, 0.5778, 0.6163, 0.6548, 0.6934, 0.7319, 0.7704, 0.8186, 0.8667, 0.9149], + q_dmg1: [2.172, 2.3349, 2.4978, 2.715, 2.8779, 3.0408, 3.258, 3.4752, 3.6924, 3.9096, 4.1268, 4.344, 4.6155, 4.887, 5.1585], +}; + +damage_enum!( + EmilieDamageEnum + Normal1 + Normal2 + Normal3 + Normal4 + Charged + Plunging1 + Plunging2 + Plunging3 + E1 + E2 + E3 + E4 + Q1 + Talent1 +); + +impl EmilieDamageEnum { + pub fn get_skill_type(&self) -> SkillType { + use EmilieDamageEnum::*; + match *self { + Normal1 | Normal2 | Normal3 | Normal4 => SkillType::NormalAttack, + Charged => SkillType::ChargedAttack, + Plunging1 => SkillType::PlungingAttackInAction, + Plunging2 | Plunging3 => SkillType::PlungingAttackOnGround, + E1 | E2 | E3 | E4 => SkillType::ElementalSkill, + Q1 => SkillType::ElementalBurst, + Talent1 => SkillType::NoneType + } + } + + pub fn get_element(&self, use_c6: bool) -> Element { + use EmilieDamageEnum::*; + if use_c6 { + match *self { + Plunging1 | Plunging2 | Plunging3 => Element::Physical, + _ => Element::Dendro, + } + } else { + match *self { + Normal1 | Normal2 | Normal3 | Normal4 | Charged | Plunging1 | Plunging2 | Plunging3 => Element::Physical, + _ => Element::Dendro, + } + } + } +} + +pub struct Emilie; + +impl CharacterTrait for Emilie { + const STATIC_DATA: CharacterStaticData = CharacterStaticData { + name: CharacterName::Emilie, + internal_name: "Emilie", + name_locale: locale!( + zh_cn: "艾梅莉埃", + en: "Emilie" + ), + element: Element::Dendro, + hp: [1056, 2740, 3646, 5455, 6099, 7016, 7874, 8802, 9445, 10381, 11025, 11971, 12615, 13568], + atk: [26, 68, 90, 135, 151, 173, 194, 217, 233, 256, 272, 295, 311, 335], + def: [57, 147, 196, 294, 328, 378, 424, 474, 508, 559, 593, 644, 679, 730], + sub_stat: CharacterSubStatFamily::CriticalDamage384, + weapon_type: WeaponType::Polearm, + star: 5, + skill_name1: locale!( + zh_cn: "普通攻击·逐影枪术·改", + en: "Normal Attack: Shadow-Hunting Spear (Custom)" + ), + skill_name2: locale!( + zh_cn: "撷萃调香", + en: "Fragrance Extraction" + ), + skill_name3: locale!( + zh_cn: "香氛演绎", + en: "Aromatic Explication" + ), + }; + type SkillType = EmilieSkillType; + const SKILL: Self::SkillType = EMILIE_SKILL; + type DamageEnumType = EmilieDamageEnum; + type RoleEnum = (); + + #[cfg(not(target_family = "wasm"))] + const SKILL_MAP: CharacterSkillMap = CharacterSkillMap { + skill1: skill_map!( + EmilieDamageEnum + Normal1 hit_n_dmg!(1) + Normal2 hit_n_dmg!(2) + Normal3 hit_n_dmg!(3) + Normal4 hit_n_dmg!(4) + Charged charged_dmg!() + Plunging1 plunging_dmg!(1) + Plunging2 plunging_dmg!(2) + Plunging3 plunging_dmg!(3) + ), + skill2: skill_map!( + EmilieDamageEnum + E1 locale!(zh_cn: "技能伤害", en: "Skill DMG") + E2 locale!(zh_cn: "柔灯之匣·一阶攻击伤害", en: "Level 1 Lumidouce Case Attack DMG") + E3 locale!(zh_cn: "柔灯之匣·二阶攻击伤害", en: "Level 2 Lumidouce Case Attack DMG") + E4 locale!(zh_cn: "灵息之刺伤害", en: "Spiritbreath Thorn DMG") + Talent1 locale!(zh_cn: "「清露香氛」", en: "Cleardew Cologne") + ), + skill3: skill_map!( + EmilieDamageEnum + Q1 locale!(zh_cn: "柔灯之匣·三阶攻击伤害", en: "Level 3 Lumidouce Case Attack DMG") + ), + }; + + #[cfg(not(target_family = "wasm"))] + const CONFIG_SKILL: Option<&'static [ItemConfig]> = Some(&[ + ItemConfig { + name: "enemy_burn", + title: locale!( + zh_cn: "敌人处于燃烧状态", + en: "Enemy is Burnt" + ), + config: ItemConfigType::Bool { default: false } + }, + ItemConfig { + name: "use_c6", + title: locale!( + zh_cn: "C6「茉洁香迹」", + en: "C6: Marcotte Sillage" + ), + config: ItemConfigType::Bool { default: false } + } + ]); + + fn damage_internal(context: &DamageContext<'_, D::AttributeType>, s: usize, config: &CharacterSkillConfig, fumo: Option) -> D::Result { + let s: EmilieDamageEnum = num::FromPrimitive::from_usize(s).unwrap(); + let (s1, s2, s3) = context.character_common_data.get_3_skill(); + + let mut builder = D::new(); + use EmilieDamageEnum::*; + + let (enemy_burn, use_c6) = match *config { + CharacterSkillConfig::Emilie { enemy_burn, use_c6 } => (enemy_burn, use_c6), + _ => (false, false) + }; + + let ratio = match s { + Normal1 => EMILIE_SKILL.normal_dmg1[s1], + Normal2 => EMILIE_SKILL.normal_dmg2[s1], + Normal3 => EMILIE_SKILL.normal_dmg3[s1], + Normal4 => EMILIE_SKILL.normal_dmg4[s1], + Charged => EMILIE_SKILL.charged_dmg[s1], + Plunging1 => EMILIE_SKILL.plunging_dmg1[s1], + Plunging2 => EMILIE_SKILL.plunging_dmg2[s1], + Plunging3 => EMILIE_SKILL.plunging_dmg3[s1], + E1 => EMILIE_SKILL.e_dmg1[s2], + E2 => EMILIE_SKILL.e_dmg2[s2], + E3 => EMILIE_SKILL.e_dmg3[s2], + E4 => EMILIE_SKILL.e_dmg4[s2], + Q1 => EMILIE_SKILL.q_dmg1[s3], + Talent1 => 6.0 + }; + builder.add_atk_ratio("技能倍率", ratio); + if context.character_common_data.constellation >= 1 && s == Talent1 { + builder.add_extra_bonus("C1「淡香浸析」", 0.2); + } + let use_c6 = use_c6 && context.character_common_data.constellation >= 6; + + let skill_type = s.get_skill_type(); + let element = s.get_element(use_c6); + + if use_c6 && (skill_type == SkillType::NormalAttack || skill_type == SkillType::ChargedAttack) { + builder.add_atk_ratio("C6「」茉洁香迹", 3.0); + } + + if enemy_burn && context.character_common_data.has_talent2 { + let atk = context.attribute.get_value(AttributeName::ATK); + let bonus = ((atk / 1000.0).floor() * 0.15).min(0.36); + builder.add_extra_bonus("天赋「精馏」", bonus); + } + + builder.damage( + &context.attribute, + &context.enemy, + element, + skill_type, + context.character_common_data.level, + fumo + ) + } + + fn new_effect(common_data: &CharacterCommonData, config: &CharacterConfig) -> Option>> { + None + } + + fn get_target_function_by_role(role_index: usize, team: &TeamQuantization, c: &CharacterCommonData, w: &WeaponCommonData) -> Box { + unimplemented!() + } +} diff --git a/mona_core/src/character/characters/dendro/mod.rs b/mona_core/src/character/characters/dendro/mod.rs index 58abe708..ee7f0a19 100644 --- a/mona_core/src/character/characters/dendro/mod.rs +++ b/mona_core/src/character/characters/dendro/mod.rs @@ -6,6 +6,7 @@ pub mod alhaitham; pub mod kaveh; pub mod baizhu; pub mod kirara; +mod emilie; pub use collei::Collei; pub use tighnari::Tighnari; @@ -15,3 +16,4 @@ pub use alhaitham::Alhaitham; pub use kaveh::Kaveh; pub use baizhu::Baizhu; pub use kirara::Kirara; +pub use emilie::Emilie; diff --git a/mona_core/src/character/skill_config.rs b/mona_core/src/character/skill_config.rs index 82a731cc..929865db 100644 --- a/mona_core/src/character/skill_config.rs +++ b/mona_core/src/character/skill_config.rs @@ -48,5 +48,6 @@ pub enum CharacterSkillConfig { Gaming { pyro: bool }, Arlecchino { bond_of_life: f64 }, Clorinde { bond_of_life: f64 }, + Emilie { enemy_burn: bool, use_c6: bool }, NoConfig, } diff --git a/mona_core/src/common/skill_type.rs b/mona_core/src/common/skill_type.rs index ffe8877b..50d21444 100644 --- a/mona_core/src/common/skill_type.rs +++ b/mona_core/src/common/skill_type.rs @@ -3,6 +3,7 @@ use serde::{Serialize, Deserialize}; #[derive(Serialize, Deserialize)] #[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)] pub enum SkillType { + NoneType, NormalAttack, ChargedAttack, PlungingAttackInAction, diff --git a/mona_core/src/damage/complicated_damage_builder.rs b/mona_core/src/damage/complicated_damage_builder.rs index d7d1511f..dc32179b 100644 --- a/mona_core/src/damage/complicated_damage_builder.rs +++ b/mona_core/src/damage/complicated_damage_builder.rs @@ -430,11 +430,14 @@ impl ComplicatedDamageBuilder { } fn get_extra_damage_composition(&self, attribute: &ComplicatedAttributeGraph, element: Element, skill: SkillType) -> EntryType { - let mut comp = attribute.get_composition_merge(&vec![ + let mut names = vec![ AttributeName::ExtraDmgBase, AttributeName::extra_dmg_name_by_element(element), - AttributeName::extra_dmg_name_by_skill_type(skill) - ]); + ]; + if let Some(name) = AttributeName::extra_dmg_name_by_skill_type(skill) { + names.push(name); + } + let mut comp = attribute.get_composition_merge(&names); comp.merge(&self.extra_damage); comp } @@ -490,11 +493,14 @@ impl ComplicatedDamageBuilder { } fn get_critical_damage_composition(&self, attribute: &ComplicatedAttributeGraph, element: Element, skill: SkillType) -> EntryType { - let mut comp = attribute.get_composition_merge(&vec![ + let mut names = vec![ AttributeName::CriticalDamageBase, AttributeName::critical_damage_name_by_element(element), - AttributeName::critical_damage_name_by_skill_name(skill) - ]); + ]; + if let Some(name) = AttributeName::critical_damage_name_by_skill_name(skill) { + names.push(name); + } + let mut comp = attribute.get_composition_merge(&names); comp.merge(&self.extra_critical_damage); comp } @@ -506,11 +512,14 @@ impl ComplicatedDamageBuilder { } fn get_bonus_composition(&self, attribute: &ComplicatedAttributeGraph, element: Element, skill: SkillType) -> EntryType { - let mut comp = attribute.get_composition_merge(&vec![ + let mut names = vec![ AttributeName::BonusBase, AttributeName::bonus_name_by_element(element), - AttributeName::bonus_name_by_skill_type(skill) - ]); + ]; + if let Some(name) = AttributeName::bonus_name_by_skill_type(skill) { + names.push(name); + } + let mut comp = attribute.get_composition_merge(&names); if element != Element::Physical && skill == SkillType::NormalAttack { // todo refactor comp.merge(&attribute.get_attribute_composition(AttributeName::BonusNormalAndElemental)); @@ -528,11 +537,14 @@ impl ComplicatedDamageBuilder { } fn get_atk_ratio_composition(&self, attribute: &ComplicatedAttributeGraph, element: Element, skill: SkillType) -> EntryType { - let mut atk_ratio_comp = attribute.get_composition_merge(&vec![ + let mut names = vec![ AttributeName::ATKRatioBase, AttributeName::atk_ratio_name_by_element(element), - AttributeName::atk_ratio_name_by_skill_type(skill) - ]); + ]; + if let Some(name) = AttributeName::atk_ratio_name_by_skill_type(skill) { + names.push(name) + } + let mut atk_ratio_comp = attribute.get_composition_merge(&names); atk_ratio_comp.merge(&self.ratio_atk); atk_ratio_comp @@ -550,11 +562,14 @@ impl ComplicatedDamageBuilder { } fn get_def_ratio_composition(&self, attribute: &ComplicatedAttributeGraph, element: Element, skill: SkillType) -> EntryType { - let mut def_ratio_comp = attribute.get_composition_merge(&vec![ + let mut names = vec![ AttributeName::DEFRatioBase, AttributeName::def_ratio_name_by_element(element), - AttributeName::def_ratio_name_by_skill_type(skill) - ]); + ]; + if let Some(name) = AttributeName::def_ratio_name_by_skill_type(skill) { + names.push(name); + } + let mut def_ratio_comp = attribute.get_composition_merge(&names); def_ratio_comp.merge(&self.ratio_def); def_ratio_comp @@ -581,11 +596,14 @@ impl ComplicatedDamageBuilder { } fn get_hp_ratio_composition(&self, attribute: &ComplicatedAttributeGraph, element: Element, skill: SkillType) -> EntryType { - let mut hp_ratio_comp = attribute.get_composition_merge(&vec![ + let mut names = vec![ AttributeName::HPRatioBase, AttributeName::hp_ratio_name_by_element(element), - AttributeName::hp_ratio_name_by_skill_type(skill) - ]); + ]; + if let Some(name) = AttributeName::hp_ratio_name_by_skill_type(skill) { + names.push(name) + } + let mut hp_ratio_comp = attribute.get_composition_merge(&names); hp_ratio_comp.merge(&self.ratio_hp); hp_ratio_comp diff --git a/mona_core/src/target_functions/target_function_name.rs b/mona_core/src/target_functions/target_function_name.rs index 3c1f8e61..1992380b 100644 --- a/mona_core/src/target_functions/target_function_name.rs +++ b/mona_core/src/target_functions/target_function_name.rs @@ -101,4 +101,5 @@ pub enum TargetFunctionName { ClorindeDefault, SigewinneDefault, SethosDefault, + EmilieDefault, } diff --git a/mona_core/src/target_functions/target_functions/dendro/emilie_default.rs b/mona_core/src/target_functions/target_functions/dendro/emilie_default.rs new file mode 100644 index 00000000..81e3e57f --- /dev/null +++ b/mona_core/src/target_functions/target_functions/dendro/emilie_default.rs @@ -0,0 +1,72 @@ +use crate::artifacts::Artifact; +use crate::artifacts::effect_config::ArtifactEffectConfig; +use crate::attribute::SimpleAttributeGraph2; +use crate::character::{Character, CharacterName}; +use crate::character::character_common_data::CharacterCommonData; +use crate::character::characters::Emilie; +use crate::character::skill_config::CharacterSkillConfig; +use crate::character::traits::CharacterTrait; +use crate::common::i18n::locale; +use crate::damage::{DamageContext, SimpleDamageBuilder}; +use crate::enemies::Enemy; +use crate::target_functions::target_function::TargetFunctionMetaTrait; +use crate::target_functions::target_function_meta::{TargetFunctionFor, TargetFunctionMeta, TargetFunctionMetaImage}; +use crate::target_functions::target_function_opt_config::TargetFunctionOptConfig; +use crate::target_functions::{TargetFunction, TargetFunctionConfig, TargetFunctionName}; +use crate::team::TeamQuantization; +use crate::weapon::Weapon; +use crate::weapon::weapon_common_data::WeaponCommonData; + +pub struct EmilieDefaultTargetFunction; + +impl TargetFunction for EmilieDefaultTargetFunction { + fn get_target_function_opt_config(&self) -> TargetFunctionOptConfig { + unimplemented!() + } + + fn get_default_artifact_config(&self, team_config: &TeamQuantization) -> ArtifactEffectConfig { + Default::default() + } + + fn target(&self, attribute: &SimpleAttributeGraph2, character: &Character, weapon: &Weapon, artifacts: &[&Artifact], enemy: &Enemy) -> f64 { + let context: DamageContext<'_, SimpleAttributeGraph2> = DamageContext { + character_common_data: &character.common_data, + attribute, + enemy + }; + + type S = ::DamageEnumType; + let damage = Emilie::damage::( + &context, S::E2, + &CharacterSkillConfig::Emilie { + enemy_burn: true, + use_c6: true, + }, + None + ); + + damage.normal.expectation + } +} + +impl TargetFunctionMetaTrait for EmilieDefaultTargetFunction { + #[cfg(not(target_family = "wasm"))] + const META_DATA: TargetFunctionMeta = TargetFunctionMeta { + name: TargetFunctionName::EmilieDefault, + name_locale: locale!( + zh_cn: "艾梅莉埃-「千缕之踪」", + en: "Emilie-A Thousand Scents Traced", + ), + description: locale!( + zh_cn: "最大化E伤害(敌人燃烧)", + en: "Maximize E DMG(Use Talent 2)" + ), + tags: "", + four: TargetFunctionFor::SomeWho(CharacterName::Emilie), + image: TargetFunctionMetaImage::Avatar, + }; + + fn create(character: &CharacterCommonData, weapon: &WeaponCommonData, config: &TargetFunctionConfig) -> Box { + Box::new(EmilieDefaultTargetFunction) + } +} diff --git a/mona_core/src/target_functions/target_functions/dendro/mod.rs b/mona_core/src/target_functions/target_functions/dendro/mod.rs index cf3a549f..171126e7 100644 --- a/mona_core/src/target_functions/target_functions/dendro/mod.rs +++ b/mona_core/src/target_functions/target_functions/dendro/mod.rs @@ -1,7 +1,9 @@ -pub mod tighnari_default; -pub mod nahida_default; -pub mod alhaitham_default; +mod tighnari_default; +mod nahida_default; +mod alhaitham_default; +mod emilie_default; pub use tighnari_default::TighnariDefaultTargetFunction; pub use nahida_default::NahidaDefaultTargetFunction; pub use alhaitham_default::AlhaithamDefaultTargetFunction; +pub use emilie_default::EmilieDefaultTargetFunction; diff --git a/mona_core/src/weapon/weapon_config.rs b/mona_core/src/weapon/weapon_config.rs index 3fc327df..a350e854 100644 --- a/mona_core/src/weapon/weapon_config.rs +++ b/mona_core/src/weapon/weapon_config.rs @@ -76,6 +76,7 @@ pub enum WeaponConfig { BalladOfTheFjords { use_effect: bool }, ProspectorsDrill { stack: f64 }, CrimsonMoonsSemblance { rate1: f64, rate2: f64 }, + LumidouceElegy { stack: f64 }, // Catalyst LostPrayerToTheSacredWinds { stack: f64 }, diff --git a/mona_core/src/weapon/weapon_name.rs b/mona_core/src/weapon/weapon_name.rs index cd0104a7..a45158a0 100644 --- a/mona_core/src/weapon/weapon_name.rs +++ b/mona_core/src/weapon/weapon_name.rs @@ -126,6 +126,7 @@ pub enum WeaponName { ProspectorsDrill, DialoguesOfTheDesertSages, CrimsonMoonsSemblance, + LumidouceElegy, // catalyst LostPrayerToTheSacredWinds, diff --git a/mona_core/src/weapon/weapons/polearms/lumidouce_elegy.rs b/mona_core/src/weapon/weapons/polearms/lumidouce_elegy.rs new file mode 100644 index 00000000..b71727bc --- /dev/null +++ b/mona_core/src/weapon/weapons/polearms/lumidouce_elegy.rs @@ -0,0 +1,63 @@ +use crate::attribute::{Attribute, AttributeCommon, AttributeName}; +use crate::character::character_common_data::CharacterCommonData; +use crate::common::i18n::locale; +use crate::common::item_config_type::ItemConfig; +use crate::common::WeaponType; +use crate::weapon::weapon_common_data::WeaponCommonData; +use crate::weapon::weapon_effect::WeaponEffect; +use crate::weapon::weapon_static_data::WeaponStaticData; +use crate::weapon::weapon_trait::WeaponTrait; +use crate::weapon::{WeaponConfig, WeaponName}; +use crate::weapon::weapon_base_atk::WeaponBaseATKFamily; +use crate::weapon::weapon_sub_stat::WeaponSubStatFamily; + +pub struct LumidouceElegyEffect { + pub stack: f64, +} + +impl WeaponEffect for LumidouceElegyEffect { + fn apply(&self, data: &WeaponCommonData, attribute: &mut A) { + let refine = data.refine as f64; + attribute.add_atk_percentage("柔灯挽歌被动", 0.11 + 0.04 * refine); + attribute.set_value_by(AttributeName::BonusBase, "柔灯挽歌被动", self.stack * (0.13 + 0.05 * refine)); + } +} + +pub struct LumidouceElegy; + +impl WeaponTrait for LumidouceElegy { + const META_DATA: WeaponStaticData = WeaponStaticData { + name: WeaponName::LumidouceElegy, + internal_name: "Pole_Muguet", + weapon_type: WeaponType::Polearm, + weapon_sub_stat: Some(WeaponSubStatFamily::CriticalRate72), + weapon_base: WeaponBaseATKFamily::ATK608, + star: 5, + #[cfg(not(target_family = "wasm"))] + effect: Some(locale!( + zh_cn: "攻击力提升15%-19%-23%-27%-31%;装备者对敌人触发燃烧反应或对处于燃烧状态下的敌人造成草元素伤害后,造成的伤害提高18%-23%-28%-33%-38%。该效果持续8秒,至多叠加2层;叠加至2层或2层的持续时间刷新时,恢复12-13-14-15-16点元素能量,每12秒至多通过这种方式恢复一次元素能量。上述2种效果角色处于队伍后台时也能触发。", + en: "ATK increased by 15%-19%-23%-27%-31%. When the equipping character triggers Burning on an opponent or deals Dendro DMG to Burning opponents, the DMG dealt is increased by 18%-23%-28%-33%-38%. This effect lasts for 8s, max 2 stacks. When 2 stacks are reached or when the duration of the 2nd stack is refreshed, restore 12-13-14-15-16 Energy. Energy can be restored this way once every 12s. The 2 aforementioned effects can be triggered even when the character is off-field." + )), + #[cfg(not(target_family = "wasm"))] + name_locale: locale!( + zh_cn: "柔灯挽歌", + en: "Lumidouce Elegy" + ), + }; + + #[cfg(not(target_family = "wasm"))] + const CONFIG_DATA: Option<&'static [ItemConfig]> = Some(&[ + ItemConfig::STACK02 + ]); + + fn get_effect(character: &CharacterCommonData, config: &WeaponConfig) -> Option>> { + match *config { + WeaponConfig::LumidouceElegy { stack } => { + Some(Box::new(LumidouceElegyEffect { + stack + })) + } + _ => None + } + } +} \ No newline at end of file diff --git a/mona_core/src/weapon/weapons/polearms/mod.rs b/mona_core/src/weapon/weapons/polearms/mod.rs index 74dc86e0..7ab2e937 100644 --- a/mona_core/src/weapon/weapons/polearms/mod.rs +++ b/mona_core/src/weapon/weapons/polearms/mod.rs @@ -29,6 +29,7 @@ pub use rightful_reward::RightfulReward; pub use prospectors_drill::ProspectorsDrill; pub use dialogues_of_the_desert_sages::DialoguesOfTheDesertSages; pub use crimson_moons_semblance::CrimsonMoonsSemblance; +pub use lumidouce_elegy::LumidouceElegy; pub mod engulfing_lightning; pub mod skyward_spine; @@ -61,4 +62,5 @@ pub mod rightful_reward; pub mod prospectors_drill; pub mod dialogues_of_the_desert_sages; pub mod crimson_moons_semblance; +mod lumidouce_elegy; diff --git a/mona_wasm/Cargo.lock b/mona_wasm/Cargo.lock index 14459761..668b0de1 100644 --- a/mona_wasm/Cargo.lock +++ b/mona_wasm/Cargo.lock @@ -463,6 +463,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + [[package]] name = "opaque-debug" version = "0.2.3" @@ -765,9 +771,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "serde", @@ -777,24 +783,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn 1.0.84", + "syn 2.0.60", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -802,22 +808,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 1.0.84", + "syn 2.0.60", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" diff --git a/mona_wasm/Cargo.toml b/mona_wasm/Cargo.toml index 2ae4f526..8acb3f91 100644 --- a/mona_wasm/Cargo.toml +++ b/mona_wasm/Cargo.toml @@ -20,7 +20,7 @@ strip = true [dependencies] mona = { path = "../mona_core" } mona_dsl = { path = "../mona_dsl" } -wasm-bindgen = { version = "0.2.63", features = ["serde-serialize"] } +wasm-bindgen = { version = "0.2.92", features = ["serde-serialize"] } lazy_static = "1.4.0" rand = "0.8.4" serde = { version = "1.0.133", features = ["derive"] } diff --git a/package.json b/package.json index 48ed5dc3..5558b6e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "genshin_artifacts", - "version": "5.24.0", + "version": "5.25.0", "private": true, "scripts": { "serve": "cross-env ENV_FILE=.env.development.yaml vue-cli-service serve", diff --git a/src/images/characters/Emilie_splash.png b/src/images/characters/Emilie_splash.png new file mode 100644 index 0000000000000000000000000000000000000000..724125cf3f41cf614fc80af60c8b3260abe50129 GIT binary patch literal 73294 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 z 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%0A!`|S> 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 Ef+4*N3IG5A literal 0 HcmV?d00001 diff --git a/src/pages/NewArtifactPlanPage/NewArtifactPlanPage.vue b/src/pages/NewArtifactPlanPage/NewArtifactPlanPage.vue index bbeea6b7..8e4edc72 100644 --- a/src/pages/NewArtifactPlanPage/NewArtifactPlanPage.vue +++ b/src/pages/NewArtifactPlanPage/NewArtifactPlanPage.vue @@ -1480,15 +1480,23 @@ function getArtifactsToBeCalculated(): IArtifactWasm[] { function handleOptimizeArtifact() { const start = new Date() + + const optimizeInterface = getOptimizeArtifactWasmInterface() + const artifacts = getArtifactsToBeCalculated() + + if (artifacts.length === 0) { + ElMessage.error({ + message: "没有圣遗物,请先添加圣遗物" + }) + return + } + const loading = ElLoading.service({ lock: true, fullscreen: true, text: "莫娜占卜中" }) - const optimizeInterface = getOptimizeArtifactWasmInterface() - const artifacts = getArtifactsToBeCalculated() - wasmSingleOptimize(optimizeInterface, artifacts).then(results => { const end = new Date() // @ts-ignore