From 9b2a517d79b7565ca167d36fd010101d129e8cd8 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 21 Jan 2021 14:52:07 -0500 Subject: [PATCH] Restores difficulty to mindflayer fight. Made various tweaks to skillset builder functions. --- common/src/skillset_builder.rs | 708 +++++++++++++++++---------------- world/src/site/dungeon/mod.rs | 3 +- 2 files changed, 363 insertions(+), 348 deletions(-) diff --git a/common/src/skillset_builder.rs b/common/src/skillset_builder.rs index 3898c4dc5d..59f44c569b 100644 --- a/common/src/skillset_builder.rs +++ b/common/src/skillset_builder.rs @@ -17,6 +17,7 @@ pub enum SkillSetConfig { CultistAcolyte, Warlord, Warlock, + Mindflayer, } pub struct SkillSetBuilder(SkillSet); @@ -42,21 +43,21 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsDamage)) - .with_skill(Skill::Sword(SwordSkill::TsRegen)) - .with_skill(Skill::Sword(SwordSkill::TsSpeed)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DCost)) - .with_skill(Skill::Sword(SwordSkill::DDrain)) - .with_skill(Skill::Sword(SwordSkill::DScaling)) - .with_skill(Skill::Sword(SwordSkill::DSpeed)) - .with_skill(Skill::Sword(SwordSkill::DInfinite)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SDamage)) - .with_skill(Skill::Sword(SwordSkill::SSpeed)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsRegen), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DCost), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDrain), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DScaling), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DInfinite), None) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SCost), Some(1)) } else { Self::default() } @@ -67,45 +68,45 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DCost), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SSpeed)) - .with_skill(Skill::Axe(AxeSkill::SCost)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::SInfinite), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SCost), Some(1)) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsSpeed)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::CSpeed)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CSpeed), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::ProjSpeed)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CKnockback)) - .with_skill(Skill::Bow(BowSkill::CProjSpeed)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::ProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CKnockback), Some(1)) + .with_skill(Skill::Bow(BowSkill::CProjSpeed), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FDrain)) - .with_skill(Skill::Staff(StaffSkill::FVelocity)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDrain), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(1)) }, _ => Self::default(), } @@ -116,60 +117,60 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsDamage)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SCost), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::DsDamage)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SDamage)) - .with_skill(Skill::Axe(AxeSkill::SSpeed)) - .with_skill(Skill::Axe(AxeSkill::SCost)) - .with_skill(Skill::Axe(AxeSkill::UnlockLeap)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::DsDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SInfinite), None) + .with_skill(Skill::Axe(AxeSkill::SDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SCost), Some(1)) + .with_skill(Skill::Axe(AxeSkill::UnlockLeap), None) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsDamage)) - .with_skill(Skill::Hammer(HammerSkill::SsSpeed)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::UnlockLeap)) - .with_skill(Skill::Hammer(HammerSkill::LKnockback)) - .with_skill(Skill::Hammer(HammerSkill::LRange)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::UnlockLeap), None) + .with_skill(Skill::Hammer(HammerSkill::LKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LRange), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CKnockback)) - .with_skill(Skill::Bow(BowSkill::CSpeed)) - .with_skill(Skill::Bow(BowSkill::CMove)) - .with_skill(Skill::Bow(BowSkill::UnlockRepeater)) - .with_skill(Skill::Bow(BowSkill::RArrows)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CKnockback), Some(1)) + .with_skill(Skill::Bow(BowSkill::CSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CMove), Some(1)) + .with_skill(Skill::Bow(BowSkill::UnlockRepeater), None) + .with_skill(Skill::Bow(BowSkill::RArrows), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::BExplosion)) - .with_skill(Skill::Staff(StaffSkill::BRegen)) - .with_skill(Skill::Staff(StaffSkill::BRadius)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FRange)) - .with_skill(Skill::Staff(StaffSkill::FVelocity)) - .with_skill(Skill::Staff(StaffSkill::UnlockShockwave)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::BRegen), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRadius), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FRange), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(1)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) }, _ => Self::default(), } @@ -180,68 +181,68 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsDamage)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DCost)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SDamage)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DCost), Some(1)) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SCost), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::DsSpeed)) - .with_skill(Skill::Axe(AxeSkill::DsRegen)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SDamage)) - .with_skill(Skill::Axe(AxeSkill::UnlockLeap)) - .with_skill(Skill::Axe(AxeSkill::LKnockback)) - .with_skill(Skill::Axe(AxeSkill::LCost)) - .with_skill(Skill::Axe(AxeSkill::LDistance)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::DsSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::DsRegen), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SInfinite), None) + .with_skill(Skill::Axe(AxeSkill::SDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::UnlockLeap), None) + .with_skill(Skill::Axe(AxeSkill::LKnockback), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LCost), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LDistance), Some(1)) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsDamage)) - .with_skill(Skill::Hammer(HammerSkill::SsRegen)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::CDamage)) - .with_skill(Skill::Hammer(HammerSkill::UnlockLeap)) - .with_skill(Skill::Hammer(HammerSkill::LDamage)) - .with_skill(Skill::Hammer(HammerSkill::LCost)) - .with_skill(Skill::Hammer(HammerSkill::LDistance)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsRegen), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::UnlockLeap), None) + .with_skill(Skill::Hammer(HammerSkill::LDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LCost), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LDistance), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::ProjSpeed)) - .with_skill(Skill::Bow(BowSkill::BRegen)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CDrain)) - .with_skill(Skill::Bow(BowSkill::CSpeed)) - .with_skill(Skill::Bow(BowSkill::UnlockRepeater)) - .with_skill(Skill::Bow(BowSkill::RGlide)) - .with_skill(Skill::Bow(BowSkill::RCost)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::ProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::BRegen), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDrain), Some(1)) + .with_skill(Skill::Bow(BowSkill::CSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::UnlockRepeater), None) + .with_skill(Skill::Bow(BowSkill::RGlide), None) + .with_skill(Skill::Bow(BowSkill::RCost), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::BExplosion)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FRange)) - .with_skill(Skill::Staff(StaffSkill::FDrain)) - .with_skill(Skill::Staff(StaffSkill::UnlockShockwave)) - .with_skill(Skill::Staff(StaffSkill::SDamage)) - .with_skill(Skill::Staff(StaffSkill::SRange)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FRange), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDrain), Some(1)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) + .with_skill(Skill::Staff(StaffSkill::SDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SRange), Some(1)) }, _ => Self::default(), } @@ -252,74 +253,74 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsRegen)) - .with_skill(Skill::Sword(SwordSkill::TsSpeed)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DCost)) - .with_skill(Skill::Sword(SwordSkill::DDrain)) - .with_skill(Skill::Sword(SwordSkill::DScaling)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SSpeed)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsRegen), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DCost), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDrain), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DScaling), Some(1)) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SCost), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SHelicopter)) - .with_skill(Skill::Axe(AxeSkill::SDamage)) - .with_skill(Skill::Axe(AxeSkill::UnlockLeap)) - .with_skill(Skill::Axe(AxeSkill::LKnockback)) - .with_skill(Skill::Axe(AxeSkill::LDistance)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::SInfinite), None) + .with_skill(Skill::Axe(AxeSkill::SHelicopter), None) + .with_skill(Skill::Axe(AxeSkill::SDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::UnlockLeap), None) + .with_skill(Skill::Axe(AxeSkill::LKnockback), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LDistance), Some(1)) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsSpeed)) - .with_skill(Skill::Hammer(HammerSkill::SsRegen)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::CDamage)) - .with_skill(Skill::Hammer(HammerSkill::CDrain)) - .with_skill(Skill::Hammer(HammerSkill::CSpeed)) - .with_skill(Skill::Hammer(HammerSkill::UnlockLeap)) - .with_skill(Skill::Hammer(HammerSkill::LDamage)) - .with_skill(Skill::Hammer(HammerSkill::LKnockback)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsRegen), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDrain), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::UnlockLeap), None) + .with_skill(Skill::Hammer(HammerSkill::LDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LKnockback), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::ProjSpeed)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CKnockback)) - .with_skill(Skill::Bow(BowSkill::CProjSpeed)) - .with_skill(Skill::Bow(BowSkill::CDrain)) - .with_skill(Skill::Bow(BowSkill::UnlockRepeater)) - .with_skill(Skill::Bow(BowSkill::RDamage)) - .with_skill(Skill::Bow(BowSkill::RGlide)) - .with_skill(Skill::Bow(BowSkill::RArrows)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::ProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CKnockback), Some(1)) + .with_skill(Skill::Bow(BowSkill::CProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDrain), Some(1)) + .with_skill(Skill::Bow(BowSkill::UnlockRepeater), None) + .with_skill(Skill::Bow(BowSkill::RDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::RGlide), None) + .with_skill(Skill::Bow(BowSkill::RArrows), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::BExplosion)) - .with_skill(Skill::Staff(StaffSkill::BDamage)) - .with_skill(Skill::Staff(StaffSkill::BRadius)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FRange)) - .with_skill(Skill::Staff(StaffSkill::FDrain)) - .with_skill(Skill::Staff(StaffSkill::FVelocity)) - .with_skill(Skill::Staff(StaffSkill::UnlockShockwave)) - .with_skill(Skill::Staff(StaffSkill::SDamage)) - .with_skill(Skill::Staff(StaffSkill::SRange)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::BDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRadius), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FRange), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDrain), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(1)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) + .with_skill(Skill::Staff(StaffSkill::SDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SRange), Some(1)) }, _ => Self::default(), } @@ -330,74 +331,74 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsDamage)) - .with_skill(Skill::Sword(SwordSkill::TsSpeed)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DScaling)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SDamage)) - .with_skill(Skill::Sword(SwordSkill::SSpeed)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DScaling), Some(1)) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::DsDamage)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SDamage)) - .with_skill(Skill::Axe(AxeSkill::SCost)) - .with_skill(Skill::Axe(AxeSkill::UnlockLeap)) - .with_skill(Skill::Axe(AxeSkill::LDamage)) - .with_skill(Skill::Axe(AxeSkill::LKnockback)) - .with_skill(Skill::Axe(AxeSkill::LCost)) - .with_skill(Skill::Axe(AxeSkill::LDistance)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::DsDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SInfinite), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SCost), Some(1)) + .with_skill(Skill::Axe(AxeSkill::UnlockLeap), None) + .with_skill(Skill::Axe(AxeSkill::LDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LKnockback), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LCost), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LDistance), Some(1)) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsDamage)) - .with_skill(Skill::Hammer(HammerSkill::SsRegen)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::CDamage)) - .with_skill(Skill::Hammer(HammerSkill::CDrain)) - .with_skill(Skill::Hammer(HammerSkill::UnlockLeap)) - .with_skill(Skill::Hammer(HammerSkill::LDamage)) - .with_skill(Skill::Hammer(HammerSkill::LRange)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsRegen), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDrain), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::UnlockLeap), None) + .with_skill(Skill::Hammer(HammerSkill::LDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LRange), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CKnockback)) - .with_skill(Skill::Bow(BowSkill::CProjSpeed)) - .with_skill(Skill::Bow(BowSkill::CDrain)) - .with_skill(Skill::Bow(BowSkill::UnlockRepeater)) - .with_skill(Skill::Bow(BowSkill::RDamage)) - .with_skill(Skill::Bow(BowSkill::RGlide)) - .with_skill(Skill::Bow(BowSkill::RArrows)) - .with_skill(Skill::Bow(BowSkill::RCost)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CKnockback), Some(1)) + .with_skill(Skill::Bow(BowSkill::CProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDrain), Some(1)) + .with_skill(Skill::Bow(BowSkill::UnlockRepeater), None) + .with_skill(Skill::Bow(BowSkill::RDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::RGlide), None) + .with_skill(Skill::Bow(BowSkill::RArrows), Some(1)) + .with_skill(Skill::Bow(BowSkill::RCost), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::BExplosion)) - .with_skill(Skill::Staff(StaffSkill::BDamage)) - .with_skill(Skill::Staff(StaffSkill::BRadius)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FRange)) - .with_skill(Skill::Staff(StaffSkill::FVelocity)) - .with_skill(Skill::Staff(StaffSkill::UnlockShockwave)) - .with_skill(Skill::Staff(StaffSkill::SDamage)) - .with_skill(Skill::Staff(StaffSkill::SKnockback)) - .with_skill(Skill::Staff(StaffSkill::SRange)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::BDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRadius), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FRange), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(1)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) + .with_skill(Skill::Staff(StaffSkill::SDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SKnockback), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SRange), Some(1)) }, _ => Self::default(), } @@ -408,84 +409,83 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsDamage)) - .with_skill(Skill::Sword(SwordSkill::TsRegen)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DCost)) - .with_skill(Skill::Sword(SwordSkill::DDrain)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SDamage)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsRegen), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DCost), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDrain), Some(1)) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(2)) + .with_skill(Skill::Sword(SwordSkill::SCost), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::DsDamage)) - .with_skill(Skill::Axe(AxeSkill::DsSpeed)) - .with_skill(Skill::Axe(AxeSkill::DsRegen)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SHelicopter)) - .with_skill(Skill::Axe(AxeSkill::SDamage)) - .with_skill(Skill::Axe(AxeSkill::SSpeed)) - .with_skill(Skill::Axe(AxeSkill::UnlockLeap)) - .with_skill(Skill::Axe(AxeSkill::LDamage)) - .with_skill(Skill::Axe(AxeSkill::LKnockback)) - .with_skill(Skill::Axe(AxeSkill::LDistance)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::DsDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::DsSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::DsRegen), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SInfinite), None) + .with_skill(Skill::Axe(AxeSkill::SHelicopter), None) + .with_skill(Skill::Axe(AxeSkill::SDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::UnlockLeap), None) + .with_skill(Skill::Axe(AxeSkill::LDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LKnockback), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LDistance), Some(1)) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsDamage)) - .with_skill(Skill::Hammer(HammerSkill::SsSpeed)) - .with_skill(Skill::Hammer(HammerSkill::SsRegen)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::CDamage)) - .with_skill(Skill::Hammer(HammerSkill::CDrain)) - .with_skill(Skill::Hammer(HammerSkill::UnlockLeap)) - .with_skill(Skill::Hammer(HammerSkill::LDamage)) - .with_skill(Skill::Hammer(HammerSkill::LDistance)) - .with_skill(Skill::Hammer(HammerSkill::LKnockback)) - .with_skill(Skill::Hammer(HammerSkill::LRange)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsRegen), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDrain), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::UnlockLeap), None) + .with_skill(Skill::Hammer(HammerSkill::LDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LDistance), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LRange), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::BRegen)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CKnockback)) - .with_skill(Skill::Bow(BowSkill::CProjSpeed)) - .with_skill(Skill::Bow(BowSkill::CSpeed)) - .with_skill(Skill::Bow(BowSkill::CMove)) - .with_skill(Skill::Bow(BowSkill::UnlockRepeater)) - .with_skill(Skill::Bow(BowSkill::RDamage)) - .with_skill(Skill::Bow(BowSkill::RGlide)) - .with_skill(Skill::Bow(BowSkill::RArrows)) - .with_skill(Skill::Bow(BowSkill::RCost)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::BRegen), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CKnockback), Some(1)) + .with_skill(Skill::Bow(BowSkill::CProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CMove), Some(1)) + .with_skill(Skill::Bow(BowSkill::UnlockRepeater), None) + .with_skill(Skill::Bow(BowSkill::RDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::RGlide), None) + .with_skill(Skill::Bow(BowSkill::RArrows), Some(1)) + .with_skill(Skill::Bow(BowSkill::RCost), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::BExplosion)) - .with_skill(Skill::Staff(StaffSkill::BDamage)) - .with_skill(Skill::Staff(StaffSkill::BRegen)) - .with_skill(Skill::Staff(StaffSkill::BRadius)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FDrain)) - .with_skill(Skill::Staff(StaffSkill::FVelocity)) - .with_skill(Skill::Staff(StaffSkill::UnlockShockwave)) - .with_skill(Skill::Staff(StaffSkill::SDamage)) - .with_skill(Skill::Staff(StaffSkill::SKnockback)) - .with_skill(Skill::Staff(StaffSkill::SCost)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::BDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRegen), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRadius), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDrain), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(1)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) + .with_skill(Skill::Staff(StaffSkill::SDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SKnockback), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SCost), Some(1)) }, _ => Self::default(), } @@ -496,115 +496,130 @@ impl SkillSetBuilder { // Sword Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Sword)) - .with_skill(Skill::Sword(SwordSkill::TsCombo)) - .with_skill(Skill::Sword(SwordSkill::TsDamage)) - .with_skill(Skill::Sword(SwordSkill::TsRegen)) - .with_skill(Skill::Sword(SwordSkill::TsSpeed)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DDamage)) - .with_skill(Skill::Sword(SwordSkill::DCost)) - .with_skill(Skill::Sword(SwordSkill::DDrain)) - .with_skill(Skill::Sword(SwordSkill::DScaling)) - .with_skill(Skill::Sword(SwordSkill::UnlockSpin)) - .with_skill(Skill::Sword(SwordSkill::SDamage)) - .with_skill(Skill::Sword(SwordSkill::SSpeed)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SSpins)) - .with_skill(Skill::Sword(SwordSkill::SCost)) + .with_skill(Skill::Sword(SwordSkill::TsCombo), None) + .with_skill(Skill::Sword(SwordSkill::TsDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsRegen), Some(1)) + .with_skill(Skill::Sword(SwordSkill::TsSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDamage), Some(2)) + .with_skill(Skill::Sword(SwordSkill::DCost), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DDrain), Some(1)) + .with_skill(Skill::Sword(SwordSkill::DScaling), Some(1)) + .with_skill(Skill::Sword(SwordSkill::UnlockSpin), None) + .with_skill(Skill::Sword(SwordSkill::SDamage), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpeed), Some(1)) + .with_skill(Skill::Sword(SwordSkill::SSpins), Some(2)) + .with_skill(Skill::Sword(SwordSkill::SCost), Some(1)) }, Some(ToolKind::Axe) => { // Axe Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Axe)) - .with_skill(Skill::Axe(AxeSkill::DsCombo)) - .with_skill(Skill::Axe(AxeSkill::DsDamage)) - .with_skill(Skill::Axe(AxeSkill::DsSpeed)) - .with_skill(Skill::Axe(AxeSkill::DsRegen)) - .with_skill(Skill::Axe(AxeSkill::SInfinite)) - .with_skill(Skill::Axe(AxeSkill::SHelicopter)) - .with_skill(Skill::Axe(AxeSkill::SDamage)) - .with_skill(Skill::Axe(AxeSkill::SSpeed)) - .with_skill(Skill::Axe(AxeSkill::SCost)) - .with_skill(Skill::Axe(AxeSkill::UnlockLeap)) - .with_skill(Skill::Axe(AxeSkill::LDamage)) - .with_skill(Skill::Axe(AxeSkill::LKnockback)) - .with_skill(Skill::Axe(AxeSkill::LCost)) - .with_skill(Skill::Axe(AxeSkill::LDistance)) + .with_skill(Skill::Axe(AxeSkill::DsCombo), None) + .with_skill(Skill::Axe(AxeSkill::DsDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::DsSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::DsRegen), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SInfinite), None) + .with_skill(Skill::Axe(AxeSkill::SHelicopter), None) + .with_skill(Skill::Axe(AxeSkill::SDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SSpeed), Some(1)) + .with_skill(Skill::Axe(AxeSkill::SCost), Some(1)) + .with_skill(Skill::Axe(AxeSkill::UnlockLeap), None) + .with_skill(Skill::Axe(AxeSkill::LDamage), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LKnockback), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LCost), Some(1)) + .with_skill(Skill::Axe(AxeSkill::LDistance), Some(1)) }, Some(ToolKind::Hammer) => { // Hammer Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Hammer)) - .with_skill(Skill::Hammer(HammerSkill::SsKnockback)) - .with_skill(Skill::Hammer(HammerSkill::SsDamage)) - .with_skill(Skill::Hammer(HammerSkill::SsSpeed)) - .with_skill(Skill::Hammer(HammerSkill::SsRegen)) - .with_skill(Skill::Hammer(HammerSkill::CKnockback)) - .with_skill(Skill::Hammer(HammerSkill::CDamage)) - .with_skill(Skill::Hammer(HammerSkill::CDrain)) - .with_skill(Skill::Hammer(HammerSkill::CSpeed)) - .with_skill(Skill::Hammer(HammerSkill::UnlockLeap)) - .with_skill(Skill::Hammer(HammerSkill::LDamage)) - .with_skill(Skill::Hammer(HammerSkill::LCost)) - .with_skill(Skill::Hammer(HammerSkill::LDistance)) - .with_skill(Skill::Hammer(HammerSkill::LKnockback)) - .with_skill(Skill::Hammer(HammerSkill::LRange)) + .with_skill(Skill::Hammer(HammerSkill::SsKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::SsRegen), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CDrain), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::CSpeed), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::UnlockLeap), None) + .with_skill(Skill::Hammer(HammerSkill::LDamage), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LCost), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LDistance), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LKnockback), Some(1)) + .with_skill(Skill::Hammer(HammerSkill::LRange), Some(1)) }, Some(ToolKind::Bow) => { // Bow Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Bow)) - .with_skill(Skill::Bow(BowSkill::BDamage)) - .with_skill(Skill::Bow(BowSkill::ProjSpeed)) - .with_skill(Skill::Bow(BowSkill::BRegen)) - .with_skill(Skill::Bow(BowSkill::CDamage)) - .with_skill(Skill::Bow(BowSkill::CKnockback)) - .with_skill(Skill::Bow(BowSkill::CProjSpeed)) - .with_skill(Skill::Bow(BowSkill::CDrain)) - .with_skill(Skill::Bow(BowSkill::CSpeed)) - .with_skill(Skill::Bow(BowSkill::CMove)) - .with_skill(Skill::Bow(BowSkill::UnlockRepeater)) - .with_skill(Skill::Bow(BowSkill::RDamage)) - .with_skill(Skill::Bow(BowSkill::RGlide)) - .with_skill(Skill::Bow(BowSkill::RArrows)) - .with_skill(Skill::Bow(BowSkill::RCost)) + .with_skill(Skill::Bow(BowSkill::BDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::ProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::BRegen), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::CKnockback), Some(1)) + .with_skill(Skill::Bow(BowSkill::CProjSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CDrain), Some(1)) + .with_skill(Skill::Bow(BowSkill::CSpeed), Some(1)) + .with_skill(Skill::Bow(BowSkill::CMove), Some(1)) + .with_skill(Skill::Bow(BowSkill::UnlockRepeater), None) + .with_skill(Skill::Bow(BowSkill::RDamage), Some(1)) + .with_skill(Skill::Bow(BowSkill::RGlide), None) + .with_skill(Skill::Bow(BowSkill::RArrows), Some(1)) + .with_skill(Skill::Bow(BowSkill::RCost), Some(1)) }, Some(ToolKind::Staff) => { // Staff Self::default() .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) - .with_skill(Skill::Staff(StaffSkill::BExplosion)) - .with_skill(Skill::Staff(StaffSkill::BDamage)) - .with_skill(Skill::Staff(StaffSkill::BRegen)) - .with_skill(Skill::Staff(StaffSkill::BRadius)) - .with_skill(Skill::Staff(StaffSkill::FDamage)) - .with_skill(Skill::Staff(StaffSkill::FRange)) - .with_skill(Skill::Staff(StaffSkill::FDrain)) - .with_skill(Skill::Staff(StaffSkill::FVelocity)) - .with_skill(Skill::Staff(StaffSkill::UnlockShockwave)) - .with_skill(Skill::Staff(StaffSkill::SDamage)) - .with_skill(Skill::Staff(StaffSkill::SKnockback)) - .with_skill(Skill::Staff(StaffSkill::SRange)) - .with_skill(Skill::Staff(StaffSkill::SCost)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::BDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRegen), Some(1)) + .with_skill(Skill::Staff(StaffSkill::BRadius), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FRange), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FDrain), Some(1)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(1)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) + .with_skill(Skill::Staff(StaffSkill::SDamage), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SKnockback), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SRange), Some(1)) + .with_skill(Skill::Staff(StaffSkill::SCost), Some(1)) }, _ => Self::default(), } }, + Some(Mindflayer) => Self::default() + .with_skill_group(SkillGroupKind::Weapon(ToolKind::Staff)) + .with_skill(Skill::Staff(StaffSkill::BExplosion), None) + .with_skill(Skill::Staff(StaffSkill::BDamage), Some(3)) + .with_skill(Skill::Staff(StaffSkill::BRegen), Some(2)) + .with_skill(Skill::Staff(StaffSkill::BRadius), Some(2)) + .with_skill(Skill::Staff(StaffSkill::FDamage), Some(3)) + .with_skill(Skill::Staff(StaffSkill::FRange), Some(2)) + .with_skill(Skill::Staff(StaffSkill::FDrain), Some(2)) + .with_skill(Skill::Staff(StaffSkill::FVelocity), Some(2)) + .with_skill(Skill::Staff(StaffSkill::UnlockShockwave), None) + .with_skill(Skill::Staff(StaffSkill::SDamage), Some(2)) + .with_skill(Skill::Staff(StaffSkill::SKnockback), Some(2)) + .with_skill(Skill::Staff(StaffSkill::SRange), Some(2)) + .with_skill(Skill::Staff(StaffSkill::SCost), Some(2)), Some(Villager) | None => Self::default(), } } - pub fn with_skill(mut self, skill: Skill) -> Self { + pub fn with_skill(mut self, skill: Skill, level: Option) -> Self { if let Some(skill_group) = skill.skill_group_kind() { - self.0 - .add_skill_points(skill_group, self.0.skill_cost(skill)); - self.0.unlock_skill(skill); - if !self.0.has_skill(skill) { - warn!( - "Failed to add skill: {:?}. Verify that it has the appropriate skill group \ - available and meets all prerequisite skills.", - skill - ); + for _ in 0..level.unwrap_or(1) { + self.0 + .add_skill_points(skill_group, self.0.skill_cost(skill)); + self.0.unlock_skill(skill); + if !self.0.has_skill(skill) { + warn!( + "Failed to add skill: {:?}. Verify that it has the appropriate skill \ + group available and meets all prerequisite skills.", + skill + ); + } } } else { warn!( @@ -615,9 +630,8 @@ impl SkillSetBuilder { self } - pub fn with_skill_group(mut self, skill_group: SkillGroupKind) -> Self { - self.0.unlock_skill_group(skill_group); - self + pub fn with_skill_group(self, skill_group: SkillGroupKind) -> Self { + self.with_skill(Skill::UnlockGroup(skill_group), None) } pub fn build(self) -> SkillSet { self.0 } diff --git a/world/src/site/dungeon/mod.rs b/world/src/site/dungeon/mod.rs index 7593105559..a4b63a06e6 100644 --- a/world/src/site/dungeon/mod.rs +++ b/world/src/site/dungeon/mod.rs @@ -888,7 +888,8 @@ impl Floor { ), )) .with_name("Mindflayer".to_string()) - .with_loot_drop(comp::Item::new_from_asset_expect(chosen)), + .with_loot_drop(comp::Item::new_from_asset_expect(chosen)) + .with_skillset_config(common::skillset_builder::SkillSetConfig::Mindflayer), ], _ => { vec![EntityInfo::at(tile_wcenter.map(|e| e as f32)).with_body(