From 9b8aa3030f77bcc8121db811e8e867aeb731ce29 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Mon, 26 Aug 2024 18:41:49 -0400 Subject: [PATCH] feat: Add support for "Skill Augmentation" - Add new CustomSkillId.cs file - Renamed SecretAbility.cs to AbilityId.cs and added all ability IDs - Add new scripting module for "Skill Augmentation" - Implemented tree layouts for all jobs - Implemented new REQ, RES and handlers for Skill Augmentation --- Arrowgene.Ddon.Database/IDatabase.cs | 4 +- .../Sql/Core/DdonSqlDbEquippedAbility.cs | 4 +- .../Core/DdonSqlDbUnlockedSecretAbility.cs | 16 +- .../Characters/JobManager.cs | 4 +- .../Characters/JobOrbUnlockManager.cs | 1018 +++++++++++++++++ .../Characters/OrbUnlockManager.cs | 459 ++++---- Arrowgene.Ddon.GameServer/DdonGameServer.cs | 3 + .../Handler/ItemUseBagItemHandler.cs | 2 +- ...obOrbTreeGetAllJobOrbElementListHandler.cs | 52 +- ...obOrbTreeGetJobOrbTreeStatusListHandler.cs | 7 +- .../JobOrbTreeReleaseJobOrbElementHandler.cs | 21 + .../SkillGetAcquirableAbilityListHandler.cs | 4 +- .../Handler/SkillSetAbilityHandler.cs | 2 +- .../Scripting/GameServerScriptManager.cs | 14 +- .../Interfaces/ISkillAugmentation.cs | 26 + .../Modules/SkillAugmentationModule.cs | 41 + .../Scripting/ScriptManager.cs | 5 + .../Asset/SecretAbilityAsset.cs | 4 +- .../AssetReader/SecretAbilityDeserializer.cs | 2 +- .../Entity/EntitySerializer.cs | 4 + ...GetJobOrbTreeGetAllJobOrbElementListReq.cs | 2 +- .../C2SJobOrbTreeReleaseJobOrbElementReq.cs | 35 + ...GetJobOrbTreeGetAllJobOrbElementListRes.cs | 6 +- .../S2CJobOrbTreeReleaseJobOrbElementRes.cs | 46 + .../Structure/CDataJobOrbDevoteElement.cs | 70 +- .../Structure/CDataJobOrbDevoteElementUnk0.cs | 40 + .../Entity/Structure/CDataJobOrbTreeStatus.cs | 3 +- .../scripts/skill_augmentation/alchemist.csx | 1 + .../skill_augmentation/element_archer.csx | 580 ++++++++++ .../scripts/skill_augmentation/fighter.csx | 622 ++++++++++ .../skill_augmentation/high_scepter.csx | 348 ++++++ .../scripts/skill_augmentation/hunter.csx | 1 + .../scripts/skill_augmentation/priest.csx | 1 + .../scripts/skill_augmentation/seeker.csx | 683 +++++++++++ .../skill_augmentation/shield_sage.csx | 1 + .../scripts/skill_augmentation/sorcerer.csx | 1 + .../skill_augmentation/spirit_lancer.csx | 580 ++++++++++ .../scripts/skill_augmentation/warrior.csx | 639 +++++++++++ Arrowgene.Ddon.Shared/Model/Ability.cs | 2 +- Arrowgene.Ddon.Shared/Model/AbilityId.cs | 507 ++++++++ Arrowgene.Ddon.Shared/Model/CustomSkillId.cs | 491 ++++++++ Arrowgene.Ddon.Shared/Model/JobOrbUpgrade.cs | 180 +++ .../Model/OrbGainParamType.cs | 49 +- Arrowgene.Ddon.Shared/Model/SecretAbility.cs | 101 -- .../Database/DatabaseMigratorTest.cs | 4 +- 45 files changed, 6211 insertions(+), 474 deletions(-) create mode 100644 Arrowgene.Ddon.GameServer/Characters/JobOrbUnlockManager.cs create mode 100644 Arrowgene.Ddon.GameServer/Handler/JobOrbTreeReleaseJobOrbElementHandler.cs create mode 100644 Arrowgene.Ddon.GameServer/Scripting/Interfaces/ISkillAugmentation.cs create mode 100644 Arrowgene.Ddon.GameServer/Scripting/Modules/SkillAugmentationModule.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeReleaseJobOrbElementReq.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeReleaseJobOrbElementRes.cs create mode 100644 Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElementUnk0.cs create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/alchemist.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/element_archer.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/fighter.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/high_scepter.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/hunter.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/priest.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/seeker.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/shield_sage.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/sorcerer.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/spirit_lancer.csx create mode 100644 Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/warrior.csx create mode 100644 Arrowgene.Ddon.Shared/Model/AbilityId.cs create mode 100644 Arrowgene.Ddon.Shared/Model/CustomSkillId.cs create mode 100644 Arrowgene.Ddon.Shared/Model/JobOrbUpgrade.cs delete mode 100644 Arrowgene.Ddon.Shared/Model/SecretAbility.cs diff --git a/Arrowgene.Ddon.Database/IDatabase.cs b/Arrowgene.Ddon.Database/IDatabase.cs index 467bf4bdc..b8892851a 100644 --- a/Arrowgene.Ddon.Database/IDatabase.cs +++ b/Arrowgene.Ddon.Database/IDatabase.cs @@ -296,8 +296,8 @@ Ability ability bool ReplaceAbilityPreset(uint characterId, CDataPresetAbilityParam preset); bool UpdateAbilityPreset(uint characterId, CDataPresetAbilityParam preset); - bool InsertSecretAbilityUnlock(uint commonId, SecretAbility secretAbility); - List SelectAllUnlockedSecretAbilities(uint commonId); + bool InsertSecretAbilityUnlock(uint commonId, AbilityId secretAbility); + List SelectAllUnlockedSecretAbilities(uint commonId); // (Learned) Normal Skills / Learned Core Skills bool InsertIfNotExistsNormalSkillParam( diff --git a/Arrowgene.Ddon.Database/Sql/Core/DdonSqlDbEquippedAbility.cs b/Arrowgene.Ddon.Database/Sql/Core/DdonSqlDbEquippedAbility.cs index a7ea6094c..14ed8fc6d 100644 --- a/Arrowgene.Ddon.Database/Sql/Core/DdonSqlDbEquippedAbility.cs +++ b/Arrowgene.Ddon.Database/Sql/Core/DdonSqlDbEquippedAbility.cs @@ -69,7 +69,7 @@ public bool ReplaceEquippedAbility(TCon connection, uint commonId, JobId equippe public bool ReplaceEquippedAbilities(uint commonId, JobId equippedToJob, List abilities) { - return ExecuteInTransaction(connection => + return ExecuteInTransaction((System.Action)(connection => { // Remove previously equipped abilities DeleteEquippedAbilities(connection, commonId, equippedToJob); @@ -81,7 +81,7 @@ public bool ReplaceEquippedAbilities(uint commonId, JobId equippedToJob, List : SqlDb { @@ -36,15 +36,15 @@ public bool InsertSecretAbilityUnlock(TCon conn, uint commonId, SecretAbility se }) == 1; } - public List SelectAllUnlockedSecretAbilities(uint commonId) + public List SelectAllUnlockedSecretAbilities(uint commonId) { using TCon connection = OpenNewConnection(); return SelectAllUnlockedSecretAbilities(connection, commonId); } - public List SelectAllUnlockedSecretAbilities(TCon conn, uint commonId) + public List SelectAllUnlockedSecretAbilities(TCon conn, uint commonId) { - List Results = new List(); + List Results = new List(); ExecuteInTransaction(conn => { @@ -62,15 +62,15 @@ public List SelectAllUnlockedSecretAbilities(TCon conn, uint comm return Results; } - private void AddParameter(TCom command, uint commonId, SecretAbility secretAbility) + private void AddParameter(TCom command, uint commonId, AbilityId secretAbility) { AddParameter(command, "character_common_id", commonId); AddParameter(command, "ability_id", (uint) secretAbility); } - private SecretAbility ReadUnlockedSecretAbility(TReader reader) + private AbilityId ReadUnlockedSecretAbility(TReader reader) { - return (SecretAbility) GetUInt32(reader, "ability_id"); + return (AbilityId) GetUInt32(reader, "ability_id"); } } } diff --git a/Arrowgene.Ddon.GameServer/Characters/JobManager.cs b/Arrowgene.Ddon.GameServer/Characters/JobManager.cs index 51029e480..54c12a394 100644 --- a/Arrowgene.Ddon.GameServer/Characters/JobManager.cs +++ b/Arrowgene.Ddon.GameServer/Characters/JobManager.cs @@ -714,7 +714,7 @@ public void UnlockAbility(IDatabase database, GameClient client, CharacterCommon } public Ability SetAbility(IDatabase database, GameClient client, CharacterCommon character, JobId abilityJob, byte slotNo, uint abilityId, byte abilityLv) - { + { Ability ability = character.LearnedAbilities .Where(aug =>aug.AbilityId == abilityId) .SingleOrDefault(); @@ -745,7 +745,7 @@ public void RemoveAbility(IDatabase database, CharacterCommon character, byte sl database.ReplaceEquippedAbilities(character.CommonId, character.Job, equippedAbilities); } - public void UnlockSecretAbility(GameClient client, CharacterCommon character, SecretAbility secretAbilityType) + public void UnlockSecretAbility(GameClient client, CharacterCommon character, AbilityId secretAbilityType) { // MSG_GROUP_TYPE_GET_SECRET_ABILITY = 0x30, if (_Server.Database.InsertSecretAbilityUnlock(character.CommonId, secretAbilityType)) diff --git a/Arrowgene.Ddon.GameServer/Characters/JobOrbUnlockManager.cs b/Arrowgene.Ddon.GameServer/Characters/JobOrbUnlockManager.cs new file mode 100644 index 000000000..6677bfd42 --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Characters/JobOrbUnlockManager.cs @@ -0,0 +1,1018 @@ +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model; +using System.Collections.Generic; +using System.Linq; + +namespace Arrowgene.Ddon.GameServer.Characters +{ + public class JobOrbUnlockManager + { + private DdonGameServer Server; + public JobOrbUnlockManager(DdonGameServer server) + { + Server = server; + } + + public List GetUpgradeList(JobId jobId) + { + var jobOrbUpgrades = Server.ScriptManager.SkillAugmentationModule.SkillAugmentations; + + if (!jobOrbUpgrades.ContainsKey(jobId)) + { + return new List(); + } + + return jobOrbUpgrades[jobId].Select(x => x.ToCDataJobOrbDevoteElement()).ToList(); + } + +#if false + private readonly Dictionary> gJobOrbUpgrades = new Dictionary>() + { + #region Fighter + [JobId.Fighter] = new List() + { + // 1st Tier + new JobOrbUpgrade() + .Id(0, JobId.Fighter) + .Location(4, 1) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 30), + // 2nd Tier + new JobOrbUpgrade() + .Id(1, JobId.Fighter) + .Location(4, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(0), + // 3rd Tier + new JobOrbUpgrade() + .Id(2, JobId.Fighter) + .Location(3, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(1), + new JobOrbUpgrade() + .Id(3, JobId.Fighter) + .Location(5, 3) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(1), + // 4th Tier + new JobOrbUpgrade() + .Id(4, JobId.Fighter) + .Location(4, 4) + .BloodOrbCost(1200) + .Unlocks(CustomSkillId.PierceSlash) + .HasUnlockDependencies(new List() {2, 3}), + // 5th Tier + new JobOrbUpgrade() + .Id(5, JobId.Fighter) + .Location(3, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(4), + new JobOrbUpgrade() + .Id(6, JobId.Fighter) + .Location(5, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(4), + // 6th Tier + new JobOrbUpgrade() + .Id(7, JobId.Fighter) + .Location(2, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(5), + new JobOrbUpgrade() + .Id(8, JobId.Fighter) + .Location(3, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(5), + new JobOrbUpgrade() + .Id(9, JobId.Fighter) + .Location(5, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(6), + new JobOrbUpgrade() + .Id(10, JobId.Fighter) + .Location(6, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(6), + // 7th Tier + new JobOrbUpgrade() + .Id(11, JobId.Fighter) + .Location(1, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(7), + new JobOrbUpgrade() + .Id(12, JobId.Fighter) + .Location(2, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(7), + new JobOrbUpgrade() + .Id(13, JobId.Fighter) + .Location(3, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(8), + new JobOrbUpgrade() + .Id(14, JobId.Fighter) + .Location(5, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(9), + new JobOrbUpgrade() + .Id(15, JobId.Fighter) + .Location(7, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(10), + // 8th Tier + new JobOrbUpgrade() + .Id(16, JobId.Fighter) + .Location(1, 8) + .BloodOrbCost(1200) + .Unlocks(SecretAbility.OnslaughtSlayer) + .HasUnlockDependency(11), + new JobOrbUpgrade() + .Id(17, JobId.Fighter) + .Location(2, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(12), + new JobOrbUpgrade() + .Id(18, JobId.Fighter) + .Location(3, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(13), + new JobOrbUpgrade() + .Id(19, JobId.Fighter) + .Location(5, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(14), + new JobOrbUpgrade() + .Id(20, JobId.Fighter) + .Location(6, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(14), + new JobOrbUpgrade() + .Id(21, JobId.Fighter) + .Location(7, 8) + .BloodOrbCost(1200) + .Unlocks(SecretAbility.DemolishingStrikeSlayer) + .HasUnlockDependency(15), + // 9th Tier + new JobOrbUpgrade() + .Id(22, JobId.Fighter) + .Location(2, 9) + .BloodOrbCost(1700) + .Unlocks(SecretAbility.GougeEradicate) + .HasUnlockDependency(17), + new JobOrbUpgrade() + .Id(23, JobId.Fighter) + .Location(3, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependency(18), + new JobOrbUpgrade() + .Id(24, JobId.Fighter) + .Location(5, 9) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(19), + new JobOrbUpgrade() + .Id(25, JobId.Fighter) + .Location(6, 9) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(20), + // 10th Tier + new JobOrbUpgrade() + .Id(26, JobId.Fighter) + .Location(4, 10) + .BloodOrbCost(1800) + .Unlocks(SecretAbility.CrushingBlow) + .HasUnlockDependencies(new List { 23, 24}), + // 11th Tier + new JobOrbUpgrade() + .Id(27, JobId.Fighter) + .Location(4, 11) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalAttack , 1) + .HasUnlockDependency(26), + // 12th Tier + new JobOrbUpgrade() + .Id(28, JobId.Fighter) + .Location(3, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax , 10) + .HasUnlockDependency(27), + new JobOrbUpgrade() + .Id(29, JobId.Fighter) + .Location(4, 12) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobHpMax , 25) + .HasUnlockDependency(27), + new JobOrbUpgrade() + .Id(30, JobId.Fighter) + .Location(5, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence , 1) + .HasUnlockDependency(27), + // 13th Tier + new JobOrbUpgrade() + .Id(31, JobId.Fighter) + .Location(4, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack , 1) + .HasUnlockDependency(29), + // 14th Tier + new JobOrbUpgrade() + .Id(32, JobId.Fighter) + .Location(1, 14) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax , 25) + .HasUnlockDependency(28), + new JobOrbUpgrade() + .Id(33, JobId.Fighter) + .Location(2, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobStaminaMax , 10) + .HasUnlockDependency(28), + new JobOrbUpgrade() + .Id(34, JobId.Fighter) + .Location(3, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalDefence , 1) + .HasUnlockDependency(28), + new JobOrbUpgrade() + .Id(35, JobId.Fighter) + .Location(5, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence , 25) + .HasUnlockDependency(30), + new JobOrbUpgrade() + .Id(36, JobId.Fighter) + .Location(6, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalAttack , 1) + .HasUnlockDependency(30), + new JobOrbUpgrade() + .Id(37, JobId.Fighter) + .Location(7, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax , 25) + .HasUnlockDependency(30), + // 15th Tier + new JobOrbUpgrade() + .Id(38, JobId.Fighter) + .Location(1, 15) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobStaminaMax , 10) + .HasUnlockDependency(32), + new JobOrbUpgrade() + .Id(39, JobId.Fighter) + .Location(2, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack , 1) + .HasUnlockDependency(33), + new JobOrbUpgrade() + .Id(40, JobId.Fighter) + .Location(3, 15) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence , 1) + .HasUnlockDependency(34), + new JobOrbUpgrade() + .Id(41, JobId.Fighter) + .Location(5, 15) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalDefence , 1) + .HasUnlockDependency(35), + new JobOrbUpgrade() + .Id(42, JobId.Fighter) + .Location(6, 15) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack , 1) + .HasUnlockDependency(36), + new JobOrbUpgrade() + .Id(43, JobId.Fighter) + .Location(7, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax , 25) + .HasUnlockDependency(37), + // 16th Tier + new JobOrbUpgrade() + .Id(43, JobId.Fighter) + .Location(2, 16) + .BloodOrbCost(1700) + .Unlocks(SecretAbility.DireOnslaughtSlayer) + .HasUnlockDependency(39), + new JobOrbUpgrade() + .Id(44, JobId.Fighter) + .Location(3, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(40), + new JobOrbUpgrade() + .Id(45, JobId.Fighter) + .Location(5, 16) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(41), + new JobOrbUpgrade() + .Id(46, JobId.Fighter) + .Location(6, 16) + .BloodOrbCost(1700) + .Unlocks(SecretAbility.FirmShield) + .HasUnlockDependency(42), + // 17th Tier + new JobOrbUpgrade() + .Id(47, JobId.Fighter) + .Location(3, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(44), + new JobOrbUpgrade() + .Id(48, JobId.Fighter) + .Location(5, 17) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(45), + // 18th Tier + new JobOrbUpgrade() + .Id(49, JobId.Fighter) + .Location(3, 18) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(47), + new JobOrbUpgrade() + .Id(50, JobId.Fighter) + .Location(5, 18) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(48), + // 19th Tier + new JobOrbUpgrade() + .Id(51, JobId.Fighter) + .Location(3, 19) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(49), + new JobOrbUpgrade() + .Id(52, JobId.Fighter) + .Location(5, 19) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(50), + // 20th Tier + new JobOrbUpgrade() + .Id(53, JobId.Fighter) + .Location(4, 20) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(new List() {51, 52 }), + }, + #endregion + #region SEEKER + [JobId.Seeker] = new List() + { + + }, + #endregion + [JobId.Hunter] = new List() + { + // 1st Tier + new JobOrbUpgrade() + .Id(0, JobId.Hunter) + .Location(4, 1) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10), + // 2nd Tier + new JobOrbUpgrade() + .Id(1, JobId.Hunter) + .Location(3, 2) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(0), + new JobOrbUpgrade() + .Id(2, JobId.Hunter) + .Location(5, 2) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(0), + // 3rd Tier + new JobOrbUpgrade() + .Id(3, JobId.Hunter) + .Location(2, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(new List{1, 2}), + new JobOrbUpgrade() + .Id(4, JobId.Hunter) + .Location(4, 3) + .BloodOrbCost(1200) + .Unlocks(CustomSkillId.SkyBurstShot) + .HasUnlockDependencies(new List{1, 2}), + new JobOrbUpgrade() + .Id(5, JobId.Hunter) + .Location(6, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(new List{1, 2}), + // 4th Tier + new JobOrbUpgrade() + .Id(6, JobId.Hunter) + .Location(2, 4) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(3), + new JobOrbUpgrade() + .Id(7, JobId.Hunter) + .Location(4, 4) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(4), + new JobOrbUpgrade() + .Id(8, JobId.Hunter) + .Location(6, 4) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(5), + // 5th Tier + new JobOrbUpgrade() + .Id(9, JobId.Hunter) + .Location(1, 5) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(6), + new JobOrbUpgrade() + .Id(10, JobId.Hunter) + .Location(2, 5) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(6), + new JobOrbUpgrade() + .Id(11, JobId.Hunter) + .Location(4, 5) + .BloodOrbCost(1200) + .Unlocks(SecretAbility.ArcherySlayer) + .HasUnlockDependency(7), + new JobOrbUpgrade() + .Id(12, JobId.Hunter) + .Location(6, 5) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(8), + new JobOrbUpgrade() + .Id(13, JobId.Hunter) + .Location(7, 5) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(8), + // 6th Tier + new JobOrbUpgrade() + .Id(14, JobId.Hunter) + .Location(1, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(9), + new JobOrbUpgrade() + .Id(15, JobId.Hunter) + .Location(2, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(10), + new JobOrbUpgrade() + .Id(16, JobId.Hunter) + .Location(4, 6) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(11), + new JobOrbUpgrade() + .Id(17, JobId.Hunter) + .Location(6, 6) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 10) + .HasUnlockDependency(12), + new JobOrbUpgrade() + .Id(18, JobId.Hunter) + .Location(7, 6) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(13), + // 7th Tier + new JobOrbUpgrade() + .Id(19, JobId.Hunter) + .Location(1, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(14), + new JobOrbUpgrade() + .Id(20, JobId.Hunter) + .Location(4, 7) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(new List() {15, 17}), + new JobOrbUpgrade() + .Id(21, JobId.Hunter) + .Location(7, 7) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(18), + // 8th Tier + new JobOrbUpgrade() + .Id(22, JobId.Hunter) + .Location(1, 8) + .BloodOrbCost(1700) + .Unlocks(SecretAbility.ExplodingArrowFury) + .HasUnlockDependency(19), + new JobOrbUpgrade() + .Id(23, JobId.Hunter) + .Location(3, 8) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(20), + new JobOrbUpgrade() + .Id(24, JobId.Hunter) + .Location(5, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(20), + new JobOrbUpgrade() + .Id(25, JobId.Hunter) + .Location(7, 8) + .BloodOrbCost(2000) + .Unlocks(SecretAbility.ArrowheadStrikeFury) + .HasUnlockDependency(21), + // 9th Tier + new JobOrbUpgrade() + .Id(25, JobId.Hunter) + .Location(4, 9) + .BloodOrbCost(1800) + .Unlocks(SecretAbility.RigidStance) + .HasUnlockDependencies(new List {23, 24}), + }, + [JobId.Priest] = new List() { }, + [JobId.ShieldSage] = new List() { }, + [JobId.Sorcerer] = new List() { }, + + #region WARRIOR + [JobId.Warrior] = new List() + { + // First Layer + new JobOrbUpgrade() + .Id(0, JobId.Warrior) + .Location(4, 1) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10), + // Second Layer + new JobOrbUpgrade() + .Id(1, JobId.Warrior) + .Location(3, 2) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(0), + new JobOrbUpgrade() + .Id(2, JobId.Warrior) + .Location(4, 2) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(0), + new JobOrbUpgrade() + .Id(3, JobId.Warrior) + .Location(5, 2) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(0), + // Third Layer + new JobOrbUpgrade() + .Id(5, JobId.Warrior) + .Location(2, 3) + .BloodOrbCost(1200) + .HasUnlockDependency(1), + new JobOrbUpgrade() + .Id(6, JobId.Warrior) + .Location(3, 3) + .BloodOrbCost(800) + .HasUnlockDependency(1), + new JobOrbUpgrade() + .Id(7, JobId.Warrior) + .Location(4, 3) + .BloodOrbCost(800) + .Unlocks(CustomSkillId.GreatGougingFang) + .HasUnlockDependency(2), + new JobOrbUpgrade() + .Id(8, JobId.Warrior) + .Location(5, 3) + .BloodOrbCost(800) + .HasUnlockDependency(3), + new JobOrbUpgrade() + .Id(9, JobId.Warrior) + .Location(6, 3) + .BloodOrbCost(1200) + .HasUnlockDependency(3), + }, + #endregion + + [JobId.ElementArcher] = new List() { }, + [JobId.Alchemist] = new List() { }, + [JobId.SpiritLancer] = new List() { }, + + #region HIGHSCEPTER + [JobId.HighScepter] = new List() + { + // 1st Layer + new JobOrbUpgrade() + .Id(0, JobId.HighScepter) + .Location(4, 1) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasQuestDependency(60300401), + // 2nd Layer + new JobOrbUpgrade() + .Id(1, JobId.HighScepter) + .Location(3, 2) + .BloodOrbCost(700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(0), + new JobOrbUpgrade() + .Id(2, JobId.HighScepter) + .Location(5, 2) + .BloodOrbCost(700) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(0), + // 3rd Layer + new JobOrbUpgrade() + .Id(3, JobId.HighScepter) + .Location(2, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(1), + new JobOrbUpgrade() + .Id(4, JobId.HighScepter) + .Location(3, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(1), + new JobOrbUpgrade() + .Id(5, JobId.HighScepter) + .Location(5, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(2), + new JobOrbUpgrade() + .Id(6, JobId.HighScepter) + .Location(6, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(2), + // 4th Layer + new JobOrbUpgrade() + .Id(7, JobId.HighScepter) + .Location(2, 4) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(3), + new JobOrbUpgrade() + .Id(8, JobId.HighScepter) + .Location(4, 4) + .BloodOrbCost(1000) + .Unlocks(CustomSkillId.EclipseBright) + .HasUnlockDependencies(new List() {4, 5}), + new JobOrbUpgrade() + .Id(9, JobId.HighScepter) + .Location(6, 4) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(6), + // 5th Layer + new JobOrbUpgrade() + .Id(10, JobId.HighScepter) + .Location(2, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(7), + new JobOrbUpgrade() + .Id(11, JobId.HighScepter) + .Location(3, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(7), + new JobOrbUpgrade() + .Id(12, JobId.HighScepter) + .Location(5, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(9), + new JobOrbUpgrade() + .Id(13, JobId.HighScepter) + .Location(6, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(9), + // 6th Layer + new JobOrbUpgrade() + .Id(14, JobId.HighScepter) + .Location(3, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(11), + new JobOrbUpgrade() + .Id(15, JobId.HighScepter) + .Location(5, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(12), + // 7th Layer + new JobOrbUpgrade() + .Id(16, JobId.HighScepter) + .Location(1, 7) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 20) + .HasUnlockDependency(14), + new JobOrbUpgrade() + .Id(17, JobId.HighScepter) + .Location(3, 7) + .BloodOrbCost(1500) + .Unlocks(SecretAbility.ArcSlashSlayer) + .HasUnlockDependency(14), + new JobOrbUpgrade() + .Id(18, JobId.HighScepter) + .Location(5, 7) + .BloodOrbCost(1500) + .Unlocks(SecretAbility.SkySlashSlayer) + .HasUnlockDependency(15), + new JobOrbUpgrade() + .Id(19, JobId.HighScepter) + .Location(7, 7) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 20) + .HasUnlockDependency(15), + // 8th Layer + new JobOrbUpgrade() + .Id(20, JobId.HighScepter) + .Location(1, 8) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(16), + new JobOrbUpgrade() + .Id(21, JobId.HighScepter) + .Location(2, 8) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(16), + new JobOrbUpgrade() + .Id(22, JobId.HighScepter) + .Location(4, 8) + .BloodOrbCost(1500) + .Unlocks(SecretAbility.QuadrupleSlash) + .HasUnlockDependencies(new List() {17, 18}), + new JobOrbUpgrade() + .Id(23, JobId.HighScepter) + .Location(6, 8) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(19), + new JobOrbUpgrade() + .Id(24, JobId.HighScepter) + .Location(7, 8) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(19), + // 9th Layer + new JobOrbUpgrade() + .Id(25, JobId.HighScepter) + .Location(2, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(21), + new JobOrbUpgrade() + .Id(26, JobId.HighScepter) + .Location(6, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(23), + // 10th Layer + new JobOrbUpgrade() + .Id(27, JobId.HighScepter) + .Location(1, 10) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2) + .HasUnlockDependency(20), + new JobOrbUpgrade() + .Id(28, JobId.HighScepter) + .Location(4, 10) + .BloodOrbCost(1800) + .Unlocks(SecretAbility.FallingSlashSlayer) + .HasUnlockDependencies(new List {25, 26}), + new JobOrbUpgrade() + .Id(29, JobId.HighScepter) + .Location(7, 10) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2) + .HasUnlockDependency(24), + // 11th Layer + new JobOrbUpgrade() + .Id(30, JobId.HighScepter) + .Location(4, 11) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(28), + // 12th Layer + new JobOrbUpgrade() + .Id(31, JobId.HighScepter) + .Location(1, 12) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(30), + new JobOrbUpgrade() + .Id(32, JobId.HighScepter) + .Location(7, 12) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(30), + // 13th Layer + new JobOrbUpgrade() + .Id(33, JobId.HighScepter) + .Location(1, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(31), + new JobOrbUpgrade() + .Id(34, JobId.HighScepter) + .Location(2, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(31), + new JobOrbUpgrade() + .Id(35, JobId.HighScepter) + .Location(3, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(31), + new JobOrbUpgrade() + .Id(36, JobId.HighScepter) + .Location(5, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(32), + new JobOrbUpgrade() + .Id(37, JobId.HighScepter) + .Location(6, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(32), + new JobOrbUpgrade() + .Id(38, JobId.HighScepter) + .Location(7, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(32), + // 14th Layer + new JobOrbUpgrade() + .Id(39, JobId.HighScepter) + .Location(1, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(33), + new JobOrbUpgrade() + .Id(40, JobId.HighScepter) + .Location(2, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(34), + new JobOrbUpgrade() + .Id(41, JobId.HighScepter) + .Location(3, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(35), + new JobOrbUpgrade() + .Id(42, JobId.HighScepter) + .Location(5, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(36), + new JobOrbUpgrade() + .Id(43, JobId.HighScepter) + .Location(6, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(37), + new JobOrbUpgrade() + .Id(44, JobId.HighScepter) + .Location(7, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(38), + // 15th Layer + new JobOrbUpgrade() + .Id(45, JobId.HighScepter) + .Location(1, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(39), + new JobOrbUpgrade() + .Id(46, JobId.HighScepter) + .Location(2, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(40), + new JobOrbUpgrade() + .Id(47, JobId.HighScepter) + .Location(6, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(43), + new JobOrbUpgrade() + .Id(48, JobId.HighScepter) + .Location(7, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(44), + // 16th Layer + new JobOrbUpgrade() + .Id(49, JobId.HighScepter) + .Location(1, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(45), + new JobOrbUpgrade() + .Id(50, JobId.HighScepter) + .Location(2, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(46), + new JobOrbUpgrade() + .Id(51, JobId.HighScepter) + .Location(6, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(47), + new JobOrbUpgrade() + .Id(52, JobId.HighScepter) + .Location(7, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(48), + // 17th Layer + new JobOrbUpgrade() + .Id(53, JobId.HighScepter) + .Location(1, 17) + .BloodOrbCost(3300) + .Unlocks(SecretAbility.OrdinaryAttack) + .HasUnlockDependency(49), + new JobOrbUpgrade() + .Id(54, JobId.HighScepter) + .Location(7, 17) + .BloodOrbCost(3300) + .Unlocks(SecretAbility.Respiration) + .HasUnlockDependency(52), + // 18th Layer + new JobOrbUpgrade() + .Id(55, JobId.HighScepter) + .Location(2, 18) + .BloodOrbCost(3300) + .Unlocks(OrbGainParamType.JobMagicalAttack, 3) + .HasUnlockDependency(50), + new JobOrbUpgrade() + .Id(56, JobId.HighScepter) + .Location(6, 18) + .BloodOrbCost(3300) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 3) + .HasUnlockDependency(51), + // 19th Layer + new JobOrbUpgrade() + .Id(57, JobId.HighScepter) + .Location(4, 19) + .BloodOrbCost(3300) + .Unlocks(OrbGainParamType.JobStaminaMax, 20) + .HasUnlockDependencies(new List() {55, 56}), + // 20th Layer + new JobOrbUpgrade() + .Id(58, JobId.HighScepter) + .Location(3, 20) + .BloodOrbCost(4000) + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2) + .HasUnlockDependency(57), + new JobOrbUpgrade() + .Id(59, JobId.HighScepter) + .Location(5, 20) + .BloodOrbCost(4000) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2) + .HasUnlockDependency(57), + }, + #endregion + }; +#endif + } +} diff --git a/Arrowgene.Ddon.GameServer/Characters/OrbUnlockManager.cs b/Arrowgene.Ddon.GameServer/Characters/OrbUnlockManager.cs index 49275e09a..30e8121cf 100644 --- a/Arrowgene.Ddon.GameServer/Characters/OrbUnlockManager.cs +++ b/Arrowgene.Ddon.GameServer/Characters/OrbUnlockManager.cs @@ -98,22 +98,22 @@ private CDataOrbGainExtendParam UpdateExtendedParamData(GameClient client, Chara switch (upgrade.GainType) { - case OrbGainParamType.HpMax: + case OrbGainParamType.AllJobsHpMax: obj.HpMax += (ushort)upgrade.Amount; break; - case OrbGainParamType.StaminaMax: + case OrbGainParamType.AllJobsStaminaMax: obj.StaminaMax += (ushort)upgrade.Amount; break; - case OrbGainParamType.PhysicalAttack: + case OrbGainParamType.AllJobsPhysicalAttack: obj.Attack += (ushort)upgrade.Amount; break; - case OrbGainParamType.PhysicalDefence: + case OrbGainParamType.AllJobsPhysicalDefence: obj.Defence += (ushort)upgrade.Amount; break; - case OrbGainParamType.MagicalAttack: + case OrbGainParamType.AllJobsMagicalAttack: obj.MagicAttack += (ushort)upgrade.Amount; break; - case OrbGainParamType.MagicalDefence: + case OrbGainParamType.AllJobsMagicalDefence: obj.MagicDefence += (ushort)upgrade.Amount; break; case OrbGainParamType.AbilityCost: @@ -167,11 +167,11 @@ private CDataOrbGainExtendParam UpdateExtendedParamData(GameClient client, Chara switch (upgrade.GainType) { - case OrbGainParamType.HpMax: - case OrbGainParamType.StaminaMax: - case OrbGainParamType.PhysicalAttack: - case OrbGainParamType.PhysicalDefence: - case OrbGainParamType.MagicalAttack: + case OrbGainParamType.AllJobsHpMax: + case OrbGainParamType.AllJobsStaminaMax: + case OrbGainParamType.AllJobsPhysicalAttack: + case OrbGainParamType.AllJobsPhysicalDefence: + case OrbGainParamType.AllJobsMagicalAttack: case OrbGainParamType.AccessorySlot: _CharacterManager.UpdateCharacterExtendedParamsNtc(client, character); break; @@ -350,7 +350,7 @@ public DragonForceUpgrade() public uint Amount { get; private set; } public LvlUpRestrictionType LvlUpRestrictionType { get; private set; } public uint LvlUpCost { get; private set; } - public SecretAbility SecretAbility { get; private set; } + public AbilityId SecretAbility { get; private set; } public uint PageNo { get; private set; } public uint GroupNo { get; private set; } public uint IndexNo { get; private set; } @@ -404,7 +404,7 @@ public DragonForceUpgrade Unlocks(OrbGainParamType Type, uint Amount) return this; } - public DragonForceUpgrade Unlocks(SecretAbility Type) + public DragonForceUpgrade Unlocks(AbilityId Type) { this.GainType = OrbGainParamType.SecretAbility; this.SecretAbility = Type; @@ -491,53 +491,53 @@ private enum Category : byte [0x03] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group5, 3) .HasTotalLevelsRestriction(8) - .Unlocks(OrbGainParamType.HpMax, 100), + .Unlocks(OrbGainParamType.AllJobsHpMax, 100), [0x04] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group5, 4) .HasTotalLevelsRestriction(4) - .Unlocks(OrbGainParamType.MagicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 5), [0x05] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group5, 5) .HasTotalLevelsRestriction(1) - .Unlocks(OrbGainParamType.PhysicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 5), [0x15] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 1) .HasOrbUnlockRestriction(10) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x16] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 2) .HasOrbUnlockRestriction(70) - .Unlocks(SecretAbility.Efficacy), + .Unlocks(AbilityId.Efficacy), [0x17] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 3) .HasOrbUnlockRestriction(10) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x18] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 4) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x19] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 5) .HasOrbUnlockRestriction(70) - .Unlocks(OrbGainParamType.HpMax, 60), + .Unlocks(OrbGainParamType.AllJobsHpMax, 60), [0x1a] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 6) .HasOrbUnlockRestriction(40) - .Unlocks(OrbGainParamType.StaminaMax, 40), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 40), [0x1b] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 7) .HasOrbUnlockRestriction(50) - .Unlocks(OrbGainParamType.HpMax, 60), + .Unlocks(OrbGainParamType.AllJobsHpMax, 60), [0x1c] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 8) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0x1d] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group2, 1) .HasOrbUnlockRestriction(30) - .Unlocks(SecretAbility.EffectExtension), + .Unlocks(AbilityId.EffectExtension), [0x1e] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group2, 2) .HasOrbUnlockRestriction(75) @@ -549,7 +549,7 @@ private enum Category : byte [0x20] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group2, 4) .HasOrbUnlockRestriction(30) - .Unlocks(SecretAbility.ExtendedSprings), + .Unlocks(AbilityId.ExtendedSprings), [0x21] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group2, 5) .HasOrbUnlockRestriction(50) @@ -570,68 +570,68 @@ private enum Category : byte [0x25] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 1) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.MagicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 1), [0x26] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 2) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x27] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 3) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x28] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 4) .HasOrbUnlockRestriction(40) - .Unlocks(OrbGainParamType.StaminaMax, 35), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 35), [0x29] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 5) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x2a] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 6) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0x2b] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 7) .HasOrbUnlockRestriction(50) - .Unlocks(SecretAbility.RainDefense), + .Unlocks(AbilityId.RainDefense), [0x2c] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 8) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.MagicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 3), [0x2d] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 1) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.PhysicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1), [0x2e] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 2) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x2f] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 3) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x30] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 4) .HasOrbUnlockRestriction(40) - .Unlocks(OrbGainParamType.StaminaMax, 35), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 35), [0x31] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 5) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x32] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 6) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x33] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 7) .HasOrbUnlockRestriction(50) - .Unlocks(SecretAbility.RainAttack), + .Unlocks(AbilityId.RainAttack), [0x34] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 8) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.PhysicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 3), #endregion @@ -648,48 +648,48 @@ private enum Category : byte [0x08] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group5, 3) .HasTotalLevelsRestriction(24) - .Unlocks(OrbGainParamType.HpMax, 100), + .Unlocks(OrbGainParamType.AllJobsHpMax, 100), [0x09] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group5, 4) .HasTotalLevelsRestriction(20) - .Unlocks(OrbGainParamType.MagicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 5), [0x0a] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group5, 5) .HasTotalLevelsRestriction(16) - .Unlocks(OrbGainParamType.PhysicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 5), [0x35] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 1) .HasOrbUnlockRestriction(170) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x36] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 2) .HasOrbUnlockRestriction(220) - .Unlocks(SecretAbility.SoftTouch), + .Unlocks(AbilityId.SoftTouch), [0x37] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 3) .HasOrbUnlockRestriction(100) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x38] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 4) .HasOrbUnlockRestriction(150) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x39] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 5) .HasOrbUnlockRestriction(250) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x3a] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 6) .HasOrbUnlockRestriction(150) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0x3b] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 7) .HasOrbUnlockRestriction(200) - .Unlocks(OrbGainParamType.HpMax, 40), + .Unlocks(OrbGainParamType.AllJobsHpMax, 40), [0x3c] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 8) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x3d] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group2, 1) @@ -710,7 +710,7 @@ private enum Category : byte [0x41] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group2, 5) .HasOrbUnlockRestriction(250) - .Unlocks(SecretAbility.Gathering), + .Unlocks(AbilityId.Gathering), [0x42] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group2, 6) .HasOrbUnlockRestriction(100) @@ -722,73 +722,73 @@ private enum Category : byte [0x44] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group2, 8) .HasOrbUnlockRestriction(200) - .Unlocks(SecretAbility.EnhancedThrow), + .Unlocks(AbilityId.EnhancedThrow), [0x45] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 1) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0x46] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 2) .HasOrbUnlockRestriction(90) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x47] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 3) .HasOrbUnlockRestriction(160) - .Unlocks(OrbGainParamType.MagicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 3), [0x48] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 4) .HasOrbUnlockRestriction(130) - .Unlocks(OrbGainParamType.StaminaMax, 25), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 25), [0x49] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 5) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.MagicalDefence, 1), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 1), [0x4a] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 6) .HasOrbUnlockRestriction(150) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0x4b] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 7) .HasOrbUnlockRestriction(200) - .Unlocks(SecretAbility.NewDefense), + .Unlocks(AbilityId.NewDefense), [0x4c] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 8) .HasOrbUnlockRestriction(160) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x4d] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 1) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x4e] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 2) .HasOrbUnlockRestriction(90) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x4f] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 3) .HasOrbUnlockRestriction(160) - .Unlocks(OrbGainParamType.PhysicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 3), [0x50] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 4) .HasOrbUnlockRestriction(130) - .Unlocks(OrbGainParamType.StaminaMax, 25), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 25), [0x51] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 5) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.PhysicalDefence, 1), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 1), [0x52] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 6) .HasOrbUnlockRestriction(150) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x53] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 7) .HasOrbUnlockRestriction(200) - .Unlocks(SecretAbility.NewAttack), + .Unlocks(AbilityId.NewAttack), [0x54] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 8) .HasOrbUnlockRestriction(160) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), #endregion @@ -805,48 +805,48 @@ private enum Category : byte [0x0d] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group5, 3) .HasTotalLevelsRestriction(40) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x0e] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group5, 4) .HasTotalLevelsRestriction(36) - .Unlocks(OrbGainParamType.MagicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 5), [0x0f] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group5, 5) .HasTotalLevelsRestriction(32) - .Unlocks(OrbGainParamType.PhysicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 5), [0x55] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 1) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x56] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 2) .HasOrbUnlockRestriction(1000) - .Unlocks(SecretAbility.Flow), + .Unlocks(AbilityId.Flow), [0x57] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 3) .HasOrbUnlockRestriction(520) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x58] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 4) .HasOrbUnlockRestriction(550) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x59] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 5) .HasOrbUnlockRestriction(600) - .Unlocks(OrbGainParamType.HpMax, 40), + .Unlocks(OrbGainParamType.AllJobsHpMax, 40), [0x5a] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 6) .HasOrbUnlockRestriction(700) - .Unlocks(OrbGainParamType.StaminaMax, 40), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 40), [0x5b] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 7) .HasOrbUnlockRestriction(800) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x5c] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 8) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x5d] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group2, 1) @@ -863,7 +863,7 @@ private enum Category : byte [0x60] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group2, 4) .HasOrbUnlockRestriction(750) - .Unlocks(SecretAbility.ExpertExcavator), + .Unlocks(AbilityId.ExpertExcavator), [0x61] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group2, 5) .HasOrbUnlockRestriction(650) @@ -875,7 +875,7 @@ private enum Category : byte [0x63] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group2, 7) .HasOrbUnlockRestriction(750) - .Unlocks(SecretAbility.Featherfoot), + .Unlocks(AbilityId.Featherfoot), [0x64] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group2, 8) .HasOrbUnlockRestriction(580) @@ -884,68 +884,68 @@ private enum Category : byte [0x65] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 1) .HasOrbUnlockRestriction(300) - .Unlocks(OrbGainParamType.MagicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 1), [0x66] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 2) .HasOrbUnlockRestriction(480) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x67] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 3) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x68] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 4) .HasOrbUnlockRestriction(580) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x69] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 5) .HasOrbUnlockRestriction(600) - .Unlocks(OrbGainParamType.MagicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 3), [0x6a] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 6) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0x6b] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 7) .HasOrbUnlockRestriction(750) - .Unlocks(SecretAbility.MoonlightDefense), + .Unlocks(AbilityId.MoonlightDefense), [0x6c] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 8) .HasOrbUnlockRestriction(550) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x6d] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 1) .HasOrbUnlockRestriction(300) - .Unlocks(OrbGainParamType.PhysicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1), [0x6e] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 2) .HasOrbUnlockRestriction(480) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x6f] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 3) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x70] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 4) .HasOrbUnlockRestriction(580) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x71] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 5) .HasOrbUnlockRestriction(600) - .Unlocks(OrbGainParamType.PhysicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 3), [0x72] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 6) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x73] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 7) .HasOrbUnlockRestriction(750) - .Unlocks(SecretAbility.MoonlightAssault), + .Unlocks(AbilityId.MoonlightAssault), [0x74] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 8) .HasOrbUnlockRestriction(550) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), #endregion @@ -962,48 +962,48 @@ private enum Category : byte [0x12] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group5, 3) .HasTotalLevelsRestriction(56) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x13] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group5, 4) .HasTotalLevelsRestriction(52) - .Unlocks(OrbGainParamType.MagicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 5), [0x14] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group5, 5) .HasTotalLevelsRestriction(48) - .Unlocks(OrbGainParamType.PhysicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 5), [0x75] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 1) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x76] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 2) .HasOrbUnlockRestriction(5000) - .Unlocks(SecretAbility.Willpower), + .Unlocks(AbilityId.Willpower), [0x77] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 3) .HasOrbUnlockRestriction(1800) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0x78] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 4) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x79] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 5) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.HpMax, 40), + .Unlocks(OrbGainParamType.AllJobsHpMax, 40), [0x7a] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 6) .HasOrbUnlockRestriction(1800) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0x7b] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 7) .HasOrbUnlockRestriction(2500) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x7c] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 8) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x7d] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group2, 1) @@ -1020,7 +1020,7 @@ private enum Category : byte [0x80] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group2, 4) .HasOrbUnlockRestriction(2700) - .Unlocks(SecretAbility.TreasureEye), + .Unlocks(AbilityId.TreasureEye), [0x81] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group2, 5) .HasOrbUnlockRestriction(2200) @@ -1028,7 +1028,7 @@ private enum Category : byte [0x82] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group2, 6) .HasOrbUnlockRestriction(3500) - .Unlocks(SecretAbility.SafeLanding), + .Unlocks(AbilityId.SafeLanding), [0x83] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group2, 7) .HasOrbUnlockRestriction(2200) @@ -1041,68 +1041,68 @@ private enum Category : byte [0x85] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 1) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0x86] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 2) .HasOrbUnlockRestriction(2300) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x87] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 3) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.MagicalAttack, 4), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 4), [0x88] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 4) .HasOrbUnlockRestriction(3000) - .Unlocks(SecretAbility.Rakshasa), + .Unlocks(AbilityId.Rakshasa), [0x89] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 5) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x8a] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 6) .HasOrbUnlockRestriction(1800) - .Unlocks(OrbGainParamType.MagicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 3), [0x8b] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 7) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x8c] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 8) .HasOrbUnlockRestriction(1800) - .Unlocks(OrbGainParamType.MagicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 3), [0x8d] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 1) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x8e] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 2) .HasOrbUnlockRestriction(2300) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x8f] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 3) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.PhysicalAttack, 4), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 4), [0x90] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 4) .HasOrbUnlockRestriction(3000) - .Unlocks(SecretAbility.Yasha), + .Unlocks(AbilityId.Yasha), [0x91] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 5) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x92] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 6) .HasOrbUnlockRestriction(1800) - .Unlocks(OrbGainParamType.PhysicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 3), [0x93] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 7) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x94] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 8) .HasOrbUnlockRestriction(1800) - .Unlocks(OrbGainParamType.PhysicalDefence, 3) + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 3) #endregion }; @@ -1122,20 +1122,20 @@ private enum Category : byte [0x97] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group5, 3) .HasTotalLevelsRestriction(8) - .Unlocks(OrbGainParamType.HpMax, 100), + .Unlocks(OrbGainParamType.AllJobsHpMax, 100), [0x98] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group5, 4) .HasTotalLevelsRestriction(4) - .Unlocks(OrbGainParamType.MagicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 5), [0x99] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group5, 5) .HasTotalLevelsRestriction(1) - .Unlocks(OrbGainParamType.PhysicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 5), [0xa9] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 1) .HasOrbUnlockRestriction(10) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0xaa] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 2) .HasOrbUnlockRestriction(30) @@ -1143,27 +1143,27 @@ private enum Category : byte [0xab] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 3) .HasOrbUnlockRestriction(10) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xac] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 4) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0xad] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 5) .HasOrbUnlockRestriction(40) - .Unlocks(OrbGainParamType.HpMax, 60), + .Unlocks(OrbGainParamType.AllJobsHpMax, 60), [0xae] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 6) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0xaf] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 7) .HasOrbUnlockRestriction(40) - .Unlocks(OrbGainParamType.HpMax, 60), + .Unlocks(OrbGainParamType.AllJobsHpMax, 60), [0xb0] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group1, 8) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0xb1] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group2, 1) @@ -1201,68 +1201,68 @@ private enum Category : byte [0xb9] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 1) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.MagicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 1), [0xba] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 2) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xbb] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 3) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0xbc] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 4) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xbd] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 5) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0xbe] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 6) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0xbf] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 7) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xc0] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group3, 8) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.MagicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 3), [0xc1] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 1) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.PhysicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1), [0xc2] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 2) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xc3] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 3) .HasOrbUnlockRestriction(15) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0xc4] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 4) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xc5] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 5) .HasOrbUnlockRestriction(20) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0xc6] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 6) .HasOrbUnlockRestriction(30) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0xc7] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 7) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xc8] = new DragonForceUpgrade() .Location(PageNo.Page1, GroupNo.Group4, 8) .HasOrbUnlockRestriction(25) - .Unlocks(OrbGainParamType.PhysicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 3), #endregion @@ -1279,20 +1279,20 @@ private enum Category : byte [0x9c] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group5, 3) .HasTotalLevelsRestriction(24) - .Unlocks(OrbGainParamType.HpMax, 100), + .Unlocks(OrbGainParamType.AllJobsHpMax, 100), [0x9d] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group5, 4) .HasTotalLevelsRestriction(20) - .Unlocks(OrbGainParamType.MagicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 5), [0x9e] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group5, 5) .HasTotalLevelsRestriction(16) - .Unlocks(OrbGainParamType.PhysicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 5), [0xc9] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 1) .HasOrbUnlockRestriction(80) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0xca] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 2) .HasOrbUnlockRestriction(180) @@ -1300,23 +1300,23 @@ private enum Category : byte [0xcb] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 3) .HasOrbUnlockRestriction(70) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xcc] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 4) .HasOrbUnlockRestriction(85) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0xcd] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 5) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0xce] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 6) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0xcf] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 7) .HasOrbUnlockRestriction(100) - .Unlocks(OrbGainParamType.HpMax, 40), + .Unlocks(OrbGainParamType.AllJobsHpMax, 40), [0xd0] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group1, 8) .HasOrbUnlockRestriction(180) @@ -1358,68 +1358,68 @@ private enum Category : byte [0xd9] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 1) .HasOrbUnlockRestriction(70) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0xda] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 2) .HasOrbUnlockRestriction(80) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0xdb] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 3) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.MagicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 3), [0xdc] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 4) .HasOrbUnlockRestriction(130) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xdd] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 5) .HasOrbUnlockRestriction(60) - .Unlocks(OrbGainParamType.MagicalDefence, 1), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 1), [0xde] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 6) .HasOrbUnlockRestriction(100) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0xdf] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 7) .HasOrbUnlockRestriction(80) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0xe0] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group3, 8) .HasOrbUnlockRestriction(100) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0xe1] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 1) .HasOrbUnlockRestriction(70) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0xe2] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 2) .HasOrbUnlockRestriction(80) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0xe3] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 3) .HasOrbUnlockRestriction(120) - .Unlocks(OrbGainParamType.PhysicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 3), [0xe4] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 4) .HasOrbUnlockRestriction(130) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xe5] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 5) .HasOrbUnlockRestriction(60) - .Unlocks(OrbGainParamType.PhysicalDefence, 1), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 1), [0xe6] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 6) .HasOrbUnlockRestriction(100) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0xe7] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 7) .HasOrbUnlockRestriction(80) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0xe8] = new DragonForceUpgrade() .Location(PageNo.Page2, GroupNo.Group4, 8) .HasOrbUnlockRestriction(100) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), #endregion @@ -1436,20 +1436,20 @@ private enum Category : byte [0xa1] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group5, 3) .HasTotalLevelsRestriction(40) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0xa2] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group5, 4) .HasTotalLevelsRestriction(36) - .Unlocks(OrbGainParamType.MagicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 5), [0xa3] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group5, 5) .HasTotalLevelsRestriction(32) - .Unlocks(OrbGainParamType.PhysicalAttack, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 5), [0xe9] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 1) .HasOrbUnlockRestriction(350) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0xea] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 2) .HasOrbUnlockRestriction(520) @@ -1457,15 +1457,15 @@ private enum Category : byte [0xeb] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 3) .HasOrbUnlockRestriction(480) - .Unlocks(OrbGainParamType.StaminaMax, 30), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 30), [0xec] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 4) .HasOrbUnlockRestriction(400) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0xed] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 5) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.HpMax, 40), + .Unlocks(OrbGainParamType.AllJobsHpMax, 40), [0xee] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 6) .HasOrbUnlockRestriction(380) @@ -1473,11 +1473,11 @@ private enum Category : byte [0xef] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 7) .HasOrbUnlockRestriction(600) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0xf0] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group1, 8) .HasOrbUnlockRestriction(380) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xf1] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group2, 1) @@ -1515,69 +1515,68 @@ private enum Category : byte [0xf9] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 1) .HasOrbUnlockRestriction(280) - .Unlocks(OrbGainParamType.MagicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 1), [0xfa] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 2) .HasOrbUnlockRestriction(320) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0xfb] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 3) .HasOrbUnlockRestriction(400) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0xfc] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 4) .HasOrbUnlockRestriction(380) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0xfd] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 5) .HasOrbUnlockRestriction(420) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0xfe] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 6) .HasOrbUnlockRestriction(450) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0xff] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 7) .HasOrbUnlockRestriction(320) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x100] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group3, 8) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.MagicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 3), [0x101] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 1) .HasOrbUnlockRestriction(280) - .Unlocks(OrbGainParamType.PhysicalAttack, 1), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1), [0x102] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 2) .HasOrbUnlockRestriction(320) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x103] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 3) .HasOrbUnlockRestriction(400) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x104] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 4) .HasOrbUnlockRestriction(380) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x105] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 5) .HasOrbUnlockRestriction(420) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x106] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 6) .HasOrbUnlockRestriction(450) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x107] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 7) .HasOrbUnlockRestriction(320) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x108] = new DragonForceUpgrade() .Location(PageNo.Page3, GroupNo.Group4, 8) .HasOrbUnlockRestriction(500) - .Unlocks(OrbGainParamType.PhysicalDefence, 3), - + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 3), #endregion #region PAGE4 @@ -1593,20 +1592,20 @@ private enum Category : byte [0xa6] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group5, 3) .HasTotalLevelsRestriction(56) - .Unlocks(OrbGainParamType.HpMax, 80), + .Unlocks(OrbGainParamType.AllJobsHpMax, 80), [0xa7] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group5, 4) .HasTotalLevelsRestriction(52) - .Unlocks(OrbGainParamType.MagicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 5), [0xa8] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group5, 5) .HasTotalLevelsRestriction(48) - .Unlocks(OrbGainParamType.PhysicalDefence, 5), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 5), [0x109] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 1) .HasOrbUnlockRestriction(1250) - .Unlocks(OrbGainParamType.HpMax, 30), + .Unlocks(OrbGainParamType.AllJobsHpMax, 30), [0x10a] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 2) .HasOrbUnlockRestriction(1750) @@ -1614,7 +1613,7 @@ private enum Category : byte [0x10b] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 3) .HasOrbUnlockRestriction(1250) - .Unlocks(OrbGainParamType.StaminaMax, 25), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 25), [0x10c] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 4) .HasOrbUnlockRestriction(2000) @@ -1622,7 +1621,7 @@ private enum Category : byte [0x10d] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 5) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.HpMax, 40), + .Unlocks(OrbGainParamType.AllJobsHpMax, 40), [0x10e] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 6) .HasOrbUnlockRestriction(2250) @@ -1630,11 +1629,11 @@ private enum Category : byte [0x10f] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 7) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.HpMax, 50), + .Unlocks(OrbGainParamType.AllJobsHpMax, 50), [0x110] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group1, 8) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.StaminaMax, 25), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 25), [0x111] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group2, 1) @@ -1672,68 +1671,68 @@ private enum Category : byte [0x119] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 1) .HasOrbUnlockRestriction(1250) - .Unlocks(OrbGainParamType.MagicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2), [0x11a] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 2) .HasOrbUnlockRestriction(1000) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x11b] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 3) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.MagicalAttack, 4), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 4), [0x11c] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 4) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x11d] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 5) .HasOrbUnlockRestriction(1300) - .Unlocks(OrbGainParamType.MagicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 2), [0x11e] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 6) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.MagicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 3), [0x11f] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 7) .HasOrbUnlockRestriction(1250) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x120] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group3, 8) .HasOrbUnlockRestriction(1600) - .Unlocks(OrbGainParamType.MagicalDefence, 3), + .Unlocks(OrbGainParamType.AllJobsMagicalDefence, 3), [0x121] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 1) .HasOrbUnlockRestriction(1250) - .Unlocks(OrbGainParamType.PhysicalAttack, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2), [0x122] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 2) .HasOrbUnlockRestriction(1000) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x123] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 3) .HasOrbUnlockRestriction(2000) - .Unlocks(OrbGainParamType.PhysicalAttack, 4), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 4), [0x124] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 4) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.StaminaMax, 20), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 20), [0x125] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 5) .HasOrbUnlockRestriction(1300) - .Unlocks(OrbGainParamType.PhysicalDefence, 2), + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 2), [0x126] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 6) .HasOrbUnlockRestriction(1500) - .Unlocks(OrbGainParamType.PhysicalAttack, 3), + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 3), [0x127] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 7) .HasOrbUnlockRestriction(1250) - .Unlocks(OrbGainParamType.StaminaMax, 15), + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 15), [0x128] = new DragonForceUpgrade() .Location(PageNo.Page4, GroupNo.Group4, 8) .HasOrbUnlockRestriction(1600) - .Unlocks(OrbGainParamType.PhysicalDefence, 3) + .Unlocks(OrbGainParamType.AllJobsPhysicalDefence, 3) #endregion }; diff --git a/Arrowgene.Ddon.GameServer/DdonGameServer.cs b/Arrowgene.Ddon.GameServer/DdonGameServer.cs index e2f09c93d..18895b46c 100644 --- a/Arrowgene.Ddon.GameServer/DdonGameServer.cs +++ b/Arrowgene.Ddon.GameServer/DdonGameServer.cs @@ -84,6 +84,7 @@ public DdonGameServer(GameServerSetting setting, GameLogicSetting gameLogicSetti RpcManager = new RpcManager(this); EpitaphRoadManager = new EpitaphRoadManager(this); ScheduleManager = new ScheduleManager(this); + JobOrbUnlockManager = new JobOrbUnlockManager(this); // Orb Management is slightly complex and requires updating fields across multiple systems OrbUnlockManager = new OrbUnlockManager(database, WalletManager, JobManager, CharacterManager); @@ -123,6 +124,7 @@ public DdonGameServer(GameServerSetting setting, GameLogicSetting gameLogicSetti public RpcManager RpcManager { get; } public EpitaphRoadManager EpitaphRoadManager { get; } private ScheduleManager ScheduleManager { get; } + public JobOrbUnlockManager JobOrbUnlockManager { get; } public ChatLogHandler ChatLogHandler { get; } @@ -436,6 +438,7 @@ private void LoadPacketHandler() AddHandler(new JobOrbTreeGetJobOrbTreeStatusListHandler(this)); AddHandler(new JobOrbTreeGetJobOrbTreeGetAllJobOrbElementListHandler(this)); + AddHandler(new JobOrbTreeReleaseJobOrbElementHandler(this)); AddHandler(new LoadingInfoLoadingGetInfoHandler(this)); diff --git a/Arrowgene.Ddon.GameServer/Handler/ItemUseBagItemHandler.cs b/Arrowgene.Ddon.GameServer/Handler/ItemUseBagItemHandler.cs index e58f9ae8e..c1daf4915 100644 --- a/Arrowgene.Ddon.GameServer/Handler/ItemUseBagItemHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/ItemUseBagItemHandler.cs @@ -45,7 +45,7 @@ public override void Handle(GameClient client, StructurePacket + public class JobOrbTreeGetJobOrbTreeGetAllJobOrbElementListHandler : GameRequestPacketHandler { - private static readonly ServerLogger Logger = LogProvider.Logger(typeof(JobOrbTreeGetJobOrbTreeGetAllJobOrbElementListHandler)); + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(BazaarCancelHandler)); public JobOrbTreeGetJobOrbTreeGetAllJobOrbElementListHandler(DdonGameServer server) : base(server) { } - public override void Handle(GameClient client, StructurePacket Request) + public override S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes Handle(GameClient client, C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq request) { - S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes Response = new S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes(); + S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes response = new S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes(); - // Stop menu from crashing game by returning an empty list - // Unfortunately, client sends an error when more than 1 CDataJobOrbDevoteElement is added to the list. - // Probably due to unknown packet format -#if false - Response.ElementList.Add(new CDataJobOrbDevoteElement() - { - ElementId = 1, - Unk0 = 2, - JobId = Request.Structure.JobId, - RequireOrb = 10, - OrbRewardType = 1, - ParamId = 0, - ParamValue = 0, // Shows up next to orb reward type - PosX = 1, - IsReleased = false - RequiredElementIDList = new List() { new CDataCommonU32(0) }, - RequiredQuestList = new List() { new CDataCommonU32(0) } - }); + response.ElementList = Server.JobOrbUnlockManager.GetUpgradeList(request.JobId); - Response.ElementList.Add(new CDataJobOrbDevoteElement() - { - ElementId = 2, - Unk0 = 0, - JobId = Request.Structure.JobId, - RequireOrb = 10, - OrbRewardType = 2, - ParamId = 0, - ParamValue = 0, // Shows up next to orb reward type - PosX = 2, - IsReleased = false, - RequiredElementIDList = new List() { new CDataCommonU32(1) }, - RequiredQuestList = new List() { new CDataCommonU32(0) } - }); -#endif - client.Send(Response); + return response; } } } diff --git a/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeGetJobOrbTreeStatusListHandler.cs b/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeGetJobOrbTreeStatusListHandler.cs index 5f17de4a2..a90846878 100644 --- a/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeGetJobOrbTreeStatusListHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeGetJobOrbTreeStatusListHandler.cs @@ -29,10 +29,15 @@ public override void Handle(GameClient client, IPacket packet) // CDataCharacterJobData CharacterJobData = client.Character.CharacterJobDataList.Where(cjd => cjd.Job == client.Character.Job).Single(); foreach (var Job in (JobId[]) JobId.GetValues(typeof(JobId))) { + if (Job == JobId.None) + { + continue; + } + Response.TreeStatusList.Add(new CDataJobOrbTreeStatus() { JobId = Job, - IsReleased = false, + IsReleased = true, Rate = 0.0f }); } diff --git a/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeReleaseJobOrbElementHandler.cs b/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeReleaseJobOrbElementHandler.cs new file mode 100644 index 000000000..6b0e6cbed --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Handler/JobOrbTreeReleaseJobOrbElementHandler.cs @@ -0,0 +1,21 @@ +using Arrowgene.Ddon.Server; +using Arrowgene.Ddon.Shared.Entity.PacketStructure; +using Arrowgene.Logging; + +namespace Arrowgene.Ddon.GameServer.Handler +{ + public class JobOrbTreeReleaseJobOrbElementHandler : GameRequestPacketHandler + { + private static readonly ServerLogger Logger = LogProvider.Logger(typeof(JobOrbTreeReleaseJobOrbElementHandler)); + + public JobOrbTreeReleaseJobOrbElementHandler(DdonGameServer server) : base(server) + { + } + + public override S2CJobOrbTreeReleaseJobOrbElementRes Handle(GameClient client, C2SJobOrbTreeReleaseJobOrbElementReq request) + { + return new(); + } + } +} + diff --git a/Arrowgene.Ddon.GameServer/Handler/SkillGetAcquirableAbilityListHandler.cs b/Arrowgene.Ddon.GameServer/Handler/SkillGetAcquirableAbilityListHandler.cs index df0f0559e..c78a249c1 100644 --- a/Arrowgene.Ddon.GameServer/Handler/SkillGetAcquirableAbilityListHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/SkillGetAcquirableAbilityListHandler.cs @@ -21733,8 +21733,8 @@ public override void Handle(GameClient client, StructurePacket UnlockedAbilities = _Database.SelectAllUnlockedSecretAbilities(client.Character.CommonId); - Response.AbilityParamList = AllSecretAbilities.Where(x => UnlockedAbilities.Contains((SecretAbility)x.AbilityNo)).ToList(); + List UnlockedAbilities = _Database.SelectAllUnlockedSecretAbilities(client.Character.CommonId); + Response.AbilityParamList = AllSecretAbilities.Where(x => UnlockedAbilities.Contains((AbilityId)x.AbilityNo)).ToList(); } client.Send(Response); diff --git a/Arrowgene.Ddon.GameServer/Handler/SkillSetAbilityHandler.cs b/Arrowgene.Ddon.GameServer/Handler/SkillSetAbilityHandler.cs index a92f74f5e..7dc4af325 100644 --- a/Arrowgene.Ddon.GameServer/Handler/SkillSetAbilityHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/SkillSetAbilityHandler.cs @@ -23,7 +23,7 @@ public override S2CSkillSetAbilityRes Handle(GameClient client, C2SSkillSetAbili { Logger.Error(client, $"Requesting to set an ability to slot 0"); } - + Ability abilitySlot = jobManager.SetAbility(Server.Database, client, client.Character, packet.Job, packet.SlotNo, packet.SkillId, packet.SkillLv); return new S2CSkillSetAbilityRes() { diff --git a/Arrowgene.Ddon.GameServer/Scripting/GameServerScriptManager.cs b/Arrowgene.Ddon.GameServer/Scripting/GameServerScriptManager.cs index 545702a0a..93eb426bf 100644 --- a/Arrowgene.Ddon.GameServer/Scripting/GameServerScriptManager.cs +++ b/Arrowgene.Ddon.GameServer/Scripting/GameServerScriptManager.cs @@ -23,6 +23,7 @@ public class GameServerScriptManager : ScriptManager public QuestModule QuestModule { get; private set; } = new QuestModule(); public ChatCommandModule ChatCommandModule { get; private set; } = new ChatCommandModule(); public PointModifierModule PointModifierModule { get; private set; } = new PointModifierModule(); + public SkillAugmentationModule SkillAugmentationModule { get; private set; } = new SkillAugmentationModule(); public GameServerScriptManager(DdonGameServer server) : base(server.AssetRepository.AssetsPath, "libs") { @@ -33,12 +34,13 @@ public GameServerScriptManager(DdonGameServer server) : base(server.AssetReposit LibDdon.SetServer(server); // Add modules to the list so the generic logic can iterate over all scripting modules - ScriptModules[ChatCommandModule.ModuleRoot] = ChatCommandModule; - ScriptModules[GameItemModule.ModuleRoot] = GameItemModule; - ScriptModules[MixinModule.ModuleRoot] = MixinModule; - ScriptModules[NpcExtendedFacilityModule.ModuleRoot] = NpcExtendedFacilityModule; - ScriptModules[QuestModule.ModuleRoot] = QuestModule; - ScriptModules[PointModifierModule.ModuleRoot] = PointModifierModule; + AddModule(ChatCommandModule); + AddModule(GameItemModule); + AddModule(MixinModule); + AddModule(NpcExtendedFacilityModule); + AddModule(PointModifierModule); + AddModule(QuestModule); + AddModule(SkillAugmentationModule); } public override void Initialize() diff --git a/Arrowgene.Ddon.GameServer/Scripting/Interfaces/ISkillAugmentation.cs b/Arrowgene.Ddon.GameServer/Scripting/Interfaces/ISkillAugmentation.cs new file mode 100644 index 000000000..6d2bd26ba --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Scripting/Interfaces/ISkillAugmentation.cs @@ -0,0 +1,26 @@ +using Arrowgene.Ddon.Shared.Model; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.GameServer.Scripting.Interfaces +{ + public abstract class ISkillAugmentation + { + public abstract JobId JobId { get; } + public List Upgrades { get; } + + public ISkillAugmentation() + { + Upgrades = new List(); + } + + public JobOrbUpgrade AddNode(uint elementId) + { + JobOrbUpgrade upgrade = new JobOrbUpgrade() + .Id(elementId, JobId); + + Upgrades.Add(upgrade); + + return upgrade; + } + } +} diff --git a/Arrowgene.Ddon.GameServer/Scripting/Modules/SkillAugmentationModule.cs b/Arrowgene.Ddon.GameServer/Scripting/Modules/SkillAugmentationModule.cs new file mode 100644 index 000000000..87a55f97f --- /dev/null +++ b/Arrowgene.Ddon.GameServer/Scripting/Modules/SkillAugmentationModule.cs @@ -0,0 +1,41 @@ +using Arrowgene.Ddon.GameServer.Scripting.Interfaces; +using Arrowgene.Ddon.Server.Scripting; +using Arrowgene.Ddon.Shared; +using Arrowgene.Ddon.Shared.Model; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Scripting; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.GameServer.Scripting +{ + public class SkillAugmentationModule : GameServerScriptModule + { + public override string ModuleRoot => "skill_augmentation"; + public override string Filter => "*.csx"; + public override bool ScanSubdirectories => true; + public override bool EnableHotLoad => true; + + public Dictionary> SkillAugmentations { get; private set; } + + public SkillAugmentationModule() + { + SkillAugmentations = new Dictionary>(); + } + + public override bool EvaluateResult(string path, ScriptState result) + { + if (result == null) + { + return false; + } + + var skillAugmentationInformation = (ISkillAugmentation) result.ReturnValue; + if (skillAugmentationInformation != null) + { + SkillAugmentations[skillAugmentationInformation.JobId] = skillAugmentationInformation.Upgrades; + } + + return true; + } + } +} diff --git a/Arrowgene.Ddon.Server/Scripting/ScriptManager.cs b/Arrowgene.Ddon.Server/Scripting/ScriptManager.cs index 5c797c450..12d4d7f63 100644 --- a/Arrowgene.Ddon.Server/Scripting/ScriptManager.cs +++ b/Arrowgene.Ddon.Server/Scripting/ScriptManager.cs @@ -243,5 +243,10 @@ private void PrintException(Exception ex) PrintException(ex.InnerException); } } + + protected void AddModule(ScriptModule module) + { + ScriptModules[module.ModuleRoot] = module; + } } } diff --git a/Arrowgene.Ddon.Shared/Asset/SecretAbilityAsset.cs b/Arrowgene.Ddon.Shared/Asset/SecretAbilityAsset.cs index c659439f0..23f43befc 100644 --- a/Arrowgene.Ddon.Shared/Asset/SecretAbilityAsset.cs +++ b/Arrowgene.Ddon.Shared/Asset/SecretAbilityAsset.cs @@ -7,9 +7,9 @@ public class SecretAbilityAsset { public SecretAbilityAsset() { - DefaultSecretAbilities = new List(); + DefaultSecretAbilities = new List(); } - public List DefaultSecretAbilities { get; set; } + public List DefaultSecretAbilities { get; set; } } } diff --git a/Arrowgene.Ddon.Shared/AssetReader/SecretAbilityDeserializer.cs b/Arrowgene.Ddon.Shared/AssetReader/SecretAbilityDeserializer.cs index 7f46a66b7..b091bab0f 100644 --- a/Arrowgene.Ddon.Shared/AssetReader/SecretAbilityDeserializer.cs +++ b/Arrowgene.Ddon.Shared/AssetReader/SecretAbilityDeserializer.cs @@ -24,7 +24,7 @@ public SecretAbilityAsset ReadPath(string path) var secretAbilities = document.RootElement.GetProperty("default_abilitiles").EnumerateArray().ToList(); foreach (var abilityId in secretAbilities) { - asset.DefaultSecretAbilities.Add((SecretAbility) abilityId.GetUInt32()); + asset.DefaultSecretAbilities.Add((AbilityId) abilityId.GetUInt32()); } return asset; diff --git a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs index 008fd3c07..87297684a 100644 --- a/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs +++ b/Arrowgene.Ddon.Shared/Entity/EntitySerializer.cs @@ -223,8 +223,10 @@ static EntitySerializer() Create(new CDataJobBaseInfo.Serializer()); Create(new CDataJobChangeInfo.Serializer()); Create(new CDataJobChangeJobResUnk0.Serializer()); + Create(new CDataJobExpMode.Serializer()); Create(new CDataJobOrbDevoteElement.Serializer()); + Create(new CDataJobOrbDevoteElementUnk0.Serializer()); Create(new CDataJobOrbTreeStatus.Serializer()); Create(new CDataJobPlayPoint.Serializer()); Create(new CDataJobValueShopItem.Serializer()); @@ -694,6 +696,7 @@ static EntitySerializer() Create(new C2SJobJobValueShopBuyItemReq.Serializer()); Create(new C2SJobJobValueShopGetLineupReq.Serializer()); Create(new C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq.Serializer()); + Create(new C2SJobOrbTreeReleaseJobOrbElementReq.Serializer()); Create(new C2SJobUpdateExpModeReq.Serializer()); Create(new C2SLoadingInfoLoadingGetInfoReq.Serializer()); @@ -1245,6 +1248,7 @@ static EntitySerializer() Create(new S2CJobJobValueShopGetLineupRes.Serializer()); Create(new S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes.Serializer()); Create(new S2CJobOrbTreeGetJobOrbTreeStatusListRes.Serializer()); + Create(new S2CJobOrbTreeReleaseJobOrbElementRes.Serializer()); Create(new S2CJobPawnJobExpUpNtc.Serializer()); Create(new S2CJobPawnJobLevelUpMemberNtc.Serializer()); Create(new S2CJobPawnJobLevelUpNtc.Serializer()); diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq.cs index f2490089d..7d4ba861c 100644 --- a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq.cs +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq.cs @@ -14,8 +14,8 @@ public C2SJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListReq() } public PacketId Id => PacketId.C2S_JOB_ORB_TREE_GET_ALL_JOB_ORB_ELEMENT_LIST_REQ; + public uint Unk0 { get; set; } public JobId JobId { get; set; } - public UInt32 Unk0 { get; set; } public class Serializer : PacketEntitySerializer { diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeReleaseJobOrbElementReq.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeReleaseJobOrbElementReq.cs new file mode 100644 index 000000000..1bcf6078e --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/C2SJobOrbTreeReleaseJobOrbElementReq.cs @@ -0,0 +1,35 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Model; +using Arrowgene.Ddon.Shared.Network; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class C2SJobOrbTreeReleaseJobOrbElementReq : IPacketStructure + { + public C2SJobOrbTreeReleaseJobOrbElementReq() + { + } + public PacketId Id => PacketId.C2S_JOB_ORB_TREE_RELEASE_JOB_ORB_ELEMENT_REQ; + + public uint Unk0 { get; set; } + public uint ElementId { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, C2SJobOrbTreeReleaseJobOrbElementReq obj) + { + WriteUInt32(buffer, obj.Unk0); + WriteUInt32(buffer, obj.ElementId); + } + + public override C2SJobOrbTreeReleaseJobOrbElementReq Read(IBuffer buffer) + { + C2SJobOrbTreeReleaseJobOrbElementReq obj = new C2SJobOrbTreeReleaseJobOrbElementReq(); + obj.Unk0 = ReadUInt32(buffer); + obj.ElementId = ReadUInt32(buffer); + return obj; + } + } + } +} + diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes.cs index cd504a93d..9b720e7e1 100644 --- a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes.cs +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes.cs @@ -10,17 +10,20 @@ public class S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes : ServerRespon public S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes() { ElementList = new List(); + Unk0List = new List(); } public override PacketId Id => PacketId.S2C_JOB_ORB_TREE_GET_ALL_JOB_ORB_ELEMENT_LIST_RES; public List ElementList { get; set; } + public List Unk0List { get; set; } public class Serializer : PacketEntitySerializer { public override void Write(IBuffer buffer, S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes obj) { WriteServerResponse(buffer, obj); - WriteEntityList(buffer, obj.ElementList); + WriteEntityList(buffer, obj.ElementList); + WriteEntityList(buffer, obj.Unk0List); } public override S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes Read(IBuffer buffer) @@ -28,6 +31,7 @@ public override S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes Read(IBuffe S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes obj = new S2CJobOrbTreeGetJobOrbTreeGetAllJobOrbElementListRes(); ReadServerResponse(buffer, obj); obj.ElementList = ReadEntityList(buffer); + obj.Unk0List = ReadEntityList(buffer); return obj; } } diff --git a/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeReleaseJobOrbElementRes.cs b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeReleaseJobOrbElementRes.cs new file mode 100644 index 000000000..6cee8e73d --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/PacketStructure/S2CJobOrbTreeReleaseJobOrbElementRes.cs @@ -0,0 +1,46 @@ +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model; +using Arrowgene.Ddon.Shared.Network; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.Shared.Entity.PacketStructure +{ + public class S2CJobOrbTreeReleaseJobOrbElementRes : ServerResponse + { + public S2CJobOrbTreeReleaseJobOrbElementRes() + { + TreeStatus = new CDataJobOrbTreeStatus(); + } + + public override PacketId Id => PacketId.S2C_JOB_ORB_TREE_RELEASE_JOB_ORB_ELEMENT_RES; + + public JobId JobId { get; set; } + public uint RestOrb { get; set; } + public uint Unk0 { get; set; } + public CDataJobOrbTreeStatus TreeStatus { get; set; } + + public class Serializer : PacketEntitySerializer + { + public override void Write(IBuffer buffer, S2CJobOrbTreeReleaseJobOrbElementRes obj) + { + WriteServerResponse(buffer, obj); + WriteByte(buffer, (byte) obj.JobId); + WriteUInt32(buffer, obj.RestOrb); + WriteUInt32(buffer, obj.Unk0); + WriteEntity(buffer, obj.TreeStatus); + } + + public override S2CJobOrbTreeReleaseJobOrbElementRes Read(IBuffer buffer) + { + S2CJobOrbTreeReleaseJobOrbElementRes obj = new S2CJobOrbTreeReleaseJobOrbElementRes(); + ReadServerResponse(buffer, obj); + obj.JobId = (JobId) ReadByte(buffer); + obj.RestOrb = ReadUInt32(buffer); + obj.Unk0 = ReadUInt32(buffer); + obj.TreeStatus = ReadEntity(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElement.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElement.cs index 08018bd4d..44e84bd16 100644 --- a/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElement.cs +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElement.cs @@ -13,34 +13,22 @@ public CDataJobOrbDevoteElement() { RequiredElementIDList = new List(); RequiredQuestList = new List(); - Unk0 = 0; - Unk1 = 0; - Unk2 = 0; - Unk3 = 0; - Unk4 = 0; + Unk1List = new List(); } - public UInt32 ElementId { get; set; } + public uint ElementId { get; set; } public JobId JobId { get; set; } - public UInt32 RequireOrb { get; set; } - public byte OrbRewardType { get; set; } + public byte Unk0 { get; set; } + public uint RequireOrb { get; set; } // Price in blood orbs + public OrbGainParamType OrbParamType { get; set; } // ORB_GAIN_PARAM_* + public uint ParamId { get; set; } // 0 unless using Augment or custom skill. Then this is the ID of those skills. + public uint ParamValue { get; set; } // Shows up next to ORB_GAIN_PARAM reward + public uint PosX { get; set; } + public uint PosY { get; set; } public bool IsReleased { get; set; } - public UInt32 ParamId { get; set; } - public UInt32 ParamValue { get; set; } - public byte PosX { get; set; } - // public UInt32 PosY { get; set; } - public bool DrawConnection { get; set; } - - public byte Unk0 { get; set; } - public byte Unk1 { get; set; } - public byte Unk2 { get; set; } - public byte Unk3 { get; set; } - public byte Unk4 { get; set; } - public byte Unk5 { get; set; } - public byte Unk6 { get; set; } - public List RequiredElementIDList { get; set; } - public List RequiredQuestList { get; set; } + public List RequiredQuestList { get; set; } + public List Unk1List { get; set; } public class Serializer : EntitySerializer { @@ -48,22 +36,17 @@ public override void Write(IBuffer buffer, CDataJobOrbDevoteElement obj) { WriteUInt32(buffer, obj.ElementId); WriteByte(buffer, (byte)obj.JobId); - WriteByte(buffer, obj.Unk0); // No idea what this does - WriteUInt32(buffer, obj.RequireOrb); // amount of BO required for the upgrade - WriteByte(buffer, obj.OrbRewardType); // Changes text between multiple effects in the UI - WriteUInt32(buffer, obj.ParamId); // No idea what this does - WriteUInt32(buffer, obj.ParamValue); // Shows next to OrbRewardType value - WriteByte(buffer, obj.Unk1); // Doesn't impact Position - WriteByte(buffer, obj.Unk2); // Doesn't Impact Position - WriteByte(buffer, obj.Unk3); // Doesn't impact Position - WriteByte(buffer, (byte) obj.PosX); // This byte controls the x position - WriteByte(buffer, obj.Unk4); // Client hangs if non-zero - WriteByte(buffer, obj.Unk5); // No idea what this does; When set, client lags for a long time - WriteBool(buffer, obj.DrawConnection); // Appears to be a bool which draws a line down - WriteByte(buffer, obj.Unk6); // No idea what this does - WriteBool(buffer, obj.IsReleased); // Turn icon on/off + WriteByte(buffer, obj.Unk0); // No idea what this does + WriteUInt32(buffer, obj.RequireOrb); // amount of BO required for the upgrade + WriteByte(buffer, (byte) obj.OrbParamType); // Changes text between multiple effects in the UI + WriteUInt32(buffer, obj.ParamId); // No idea what this does + WriteUInt32(buffer, obj.ParamValue); // Shows next to OrbRewardType value + WriteUInt32(buffer, obj.PosX); // Controls X position + WriteUInt32(buffer, obj.PosY); // Controls Y position + WriteBool(buffer, obj.IsReleased); // Appears to be a bool which draws a line down WriteEntityList(buffer, obj.RequiredElementIDList); // Dependencies on unlocking other elements first? WriteEntityList(buffer, obj.RequiredQuestList); // Quests required to be completed + WriteEntityList(buffer, obj.Unk1List); // ??? } public override CDataJobOrbDevoteElement Read(IBuffer buffer) @@ -73,20 +56,15 @@ public override CDataJobOrbDevoteElement Read(IBuffer buffer) obj.JobId = (JobId)ReadByte(buffer); obj.Unk0 = ReadByte(buffer); obj.RequireOrb = ReadUInt32(buffer); - obj.OrbRewardType = ReadByte(buffer); + obj.OrbParamType = (OrbGainParamType) ReadByte(buffer); obj.ParamId = ReadUInt32(buffer); obj.ParamValue = ReadUInt32(buffer); - obj.Unk1 = ReadByte(buffer); - obj.Unk2 = ReadByte(buffer); - obj.Unk3 = ReadByte(buffer); - obj.PosX = ReadByte(buffer); - obj.Unk4 = ReadByte(buffer); - obj.Unk5 = ReadByte(buffer); - obj.DrawConnection = ReadBool(buffer); - obj.Unk6 = ReadByte(buffer); + obj.PosX = ReadUInt32(buffer); + obj.PosY = ReadUInt32(buffer); obj.IsReleased = ReadBool(buffer); obj.RequiredElementIDList = ReadEntityList(buffer); obj.RequiredQuestList = ReadEntityList(buffer); + obj.Unk1List = ReadEntityList(buffer); return obj; } } diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElementUnk0.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElementUnk0.cs new file mode 100644 index 000000000..73a15783c --- /dev/null +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbDevoteElementUnk0.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Arrowgene.Buffers; +using Arrowgene.Ddon.Shared.Model; + +namespace Arrowgene.Ddon.Shared.Entity.Structure +{ + public class CDataJobOrbDevoteElementUnk0 + { + public CDataJobOrbDevoteElementUnk0() + { + Unk1 = string.Empty; + } + + public uint Unk0 { get; set; } + public string Unk1 { get; set; } + public bool Unk2 { get; set; } + + public class Serializer : EntitySerializer + { + public override void Write(IBuffer buffer, CDataJobOrbDevoteElementUnk0 obj) + { + WriteUInt32(buffer, obj.Unk0); + WriteMtString(buffer, obj.Unk1); + WriteBool(buffer, obj.Unk2); + } + + public override CDataJobOrbDevoteElementUnk0 Read(IBuffer buffer) + { + CDataJobOrbDevoteElementUnk0 obj = new CDataJobOrbDevoteElementUnk0(); + obj.Unk0 = ReadUInt32(buffer); + obj.Unk1 = ReadMtString(buffer); + obj.Unk2 = ReadBool(buffer); + return obj; + } + } + } +} diff --git a/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbTreeStatus.cs b/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbTreeStatus.cs index b93cd5038..8d0109c47 100644 --- a/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbTreeStatus.cs +++ b/Arrowgene.Ddon.Shared/Entity/Structure/CDataJobOrbTreeStatus.cs @@ -6,7 +6,6 @@ namespace Arrowgene.Ddon.Shared.Entity.Structure { public class CDataJobOrbTreeStatus { - public JobId JobId { get; set; } public bool IsReleased { get; set; } public float Rate { get; set; } @@ -30,4 +29,4 @@ public override CDataJobOrbTreeStatus Read(IBuffer buffer) } } } -} \ No newline at end of file +} diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/alchemist.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/alchemist.csx new file mode 100644 index 000000000..0df0e4440 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/alchemist.csx @@ -0,0 +1 @@ +// TOOD: Needs to be implmeneted diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/element_archer.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/element_archer.csx new file mode 100644 index 000000000..03403dde7 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/element_archer.csx @@ -0,0 +1,580 @@ +public class SkillAugmentation : ISkillAugmentation +{ + public override JobId JobId => JobId.ElementArcher; +} + +var skillAugmentation = new SkillAugmentation(); + +#region TIER1 +skillAugmentation.AddNode(1) + .Location(4, 1) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasQuestDependency(60200124); + +skillAugmentation.AddNode(2) + .Location(3, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(1); +skillAugmentation.AddNode(3) + .Location(4, 2) + .BloodOrbCost(700) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(1); +skillAugmentation.AddNode(4) + .Location(5, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(1); + +skillAugmentation.AddNode(5) + .Location(2, 3) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(2); +skillAugmentation.AddNode(6) + .Location(4, 3) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(3); +skillAugmentation.AddNode(7) + .Location(6, 3) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(4); + +skillAugmentation.AddNode(8) + .Location(1, 4) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(5); +skillAugmentation.AddNode(9) + .Location(4, 4) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(6); +skillAugmentation.AddNode(10) + .Location(7, 4) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(7); + +skillAugmentation.AddNode(11) + .Location(2, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(5); +skillAugmentation.AddNode(12) + .Location(4, 5) + .BloodOrbCost(1100) + .Unlocks(CustomSkillId.CureGlasta) + .HasUnlockDependencies(9); +skillAugmentation.AddNode(13) + .Location(6, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 10) + .HasUnlockDependencies(7); + +skillAugmentation.AddNode(14) + .Location(2, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(8, 11); +skillAugmentation.AddNode(15) + .Location(3, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(12); +skillAugmentation.AddNode(16) + .Location(5, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(12); +skillAugmentation.AddNode(17) + .Location(6, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(10, 13); + +skillAugmentation.AddNode(18) + .Location(2, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(14, 15); +skillAugmentation.AddNode(19) + .Location(6, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(16, 17); + +skillAugmentation.AddNode(20) + .Location(1, 8) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependencies(18); +skillAugmentation.AddNode(21) + .Location(3, 8) + .BloodOrbCost(1800) + .Unlocks(AbilityId.RushingSpearSlayer) + .HasUnlockDependencies(18); +skillAugmentation.AddNode(22) + .Location(5, 8) + .BloodOrbCost(1800) + .Unlocks(AbilityId.RisingSpearSlayer) + .HasUnlockDependencies(19); +skillAugmentation.AddNode(23) + .Location(7, 8) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependencies(19); + +skillAugmentation.AddNode(24) + .Location(4, 9) + .BloodOrbCost(1900) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(21, 22); + +skillAugmentation.AddNode(25) + .Location(3, 10) + .BloodOrbCost(2000) + .Unlocks(AbilityId.CrushingSpearSlayer) + .HasUnlockDependencies(20); +skillAugmentation.AddNode(26) + .Location(5, 10) + .BloodOrbCost(2000) + .Unlocks(AbilityId.Active) + .HasUnlockDependencies(23); +#endregion + +#region TIER2 +skillAugmentation.AddNode(27) + .Location(4, 11) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(25, 26) + .HasQuestDependency(60200125); + +skillAugmentation.AddNode(28) + .Location(3, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(27); +skillAugmentation.AddNode(29) + .Location(4, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(27); +skillAugmentation.AddNode(30) + .Location(5, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(27); + +skillAugmentation.AddNode(31) + .Location(3, 13) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(28); +skillAugmentation.AddNode(32) + .Location(4, 13) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(29); +skillAugmentation.AddNode(33) + .Location(5, 13) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(30); + +skillAugmentation.AddNode(34) + .Location(3, 14) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(31); +skillAugmentation.AddNode(35) + .Location(4, 14) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(32); +skillAugmentation.AddNode(36) + .Location(5, 14) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(33); + +skillAugmentation.AddNode(37) + .Location(3, 15) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(34); +skillAugmentation.AddNode(38) + .Location(4, 15) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(35); +skillAugmentation.AddNode(39) + .Location(5, 15) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(36); + +skillAugmentation.AddNode(40) + .Location(3, 16) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(37); +skillAugmentation.AddNode(41) + .Location(4, 16) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(38); +skillAugmentation.AddNode(42) + .Location(5, 16) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(39); + +skillAugmentation.AddNode(43) + .Location(1, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(40); +skillAugmentation.AddNode(44) + .Location(4, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(41); +skillAugmentation.AddNode(45) + .Location(7, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(42); + +skillAugmentation.AddNode(46) + .Location(2, 18) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(43); +skillAugmentation.AddNode(47) + .Location(4, 18) + .BloodOrbCost(1800) + .Unlocks(AbilityId.SweepingSpearSlayer) + .HasUnlockDependencies(44); +skillAugmentation.AddNode(48) + .Location(6, 18) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(45); + +skillAugmentation.AddNode(49) + .Location(3, 19) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(46); +skillAugmentation.AddNode(50) + .Location(5, 19) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(48); + +skillAugmentation.AddNode(51) + .Location(4, 20) + .BloodOrbCost(2000) + .Unlocks(AbilityId.ElementalDefense) + .HasUnlockDependencies(49, 50); +#endregion + +#region TIER3 +skillAugmentation.AddNode(52) + .Location(2, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(51) + .HasQuestDependency(60200138); +skillAugmentation.AddNode(53) + .Location(6, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(51) + .HasQuestDependency(60200126); + +skillAugmentation.AddNode(54) + .Location(1, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(52); +skillAugmentation.AddNode(55) + .Location(3, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(52); +skillAugmentation.AddNode(56) + .Location(5, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(53); +skillAugmentation.AddNode(57) + .Location(7, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(53); + +skillAugmentation.AddNode(58) + .Location(2, 23) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(54); +skillAugmentation.AddNode(59) + .Location(4, 23) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(55, 56); +skillAugmentation.AddNode(60) + .Location(6, 23) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(57); + +skillAugmentation.AddNode(61) + .Location(2, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(58); +skillAugmentation.AddNode(62) + .Location(4, 24) + .BloodOrbCost(2300) + .Unlocks(CustomSkillId.ScriosGuard) + .HasUnlockDependencies(59); +skillAugmentation.AddNode(63) + .Location(6, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(60); + +skillAugmentation.AddNode(64) + .Location(1, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(61); +skillAugmentation.AddNode(65) + .Location(3, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(61); +skillAugmentation.AddNode(66) + .Location(5, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(63); +skillAugmentation.AddNode(67) + .Location(7, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(63); + +skillAugmentation.AddNode(68) + .Location(2, 26) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependencies(64); +skillAugmentation.AddNode(69) + .Location(4, 26) + .BloodOrbCost(2500) + .Unlocks(AbilityId.RushingSpearDestroyer) + .HasUnlockDependencies(65, 66); +skillAugmentation.AddNode(70) + .Location(6, 26) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependencies(67); + +skillAugmentation.AddNode(71) + .Location(3, 27) + .BloodOrbCost(2150) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(69); +skillAugmentation.AddNode(72) + .Location(5, 27) + .BloodOrbCost(2150) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(69); + +skillAugmentation.AddNode(73) + .Location(1, 28) + .BloodOrbCost(2750) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(68); +skillAugmentation.AddNode(74) + .Location(3, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.RisingSpearDestroyer) + .HasUnlockDependencies(71); +skillAugmentation.AddNode(75) + .Location(5, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.CrushingSpearDestroyer) + .HasUnlockDependencies(72); +skillAugmentation.AddNode(76) + .Location(7, 28) + .BloodOrbCost(2750) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(70); + +skillAugmentation.AddNode(77) + .Location(2, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependencies(73); +skillAugmentation.AddNode(78) + .Location(6, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 10) + .HasUnlockDependencies(76); + +skillAugmentation.AddNode(79) + .Location(4, 30) + .BloodOrbCost(3200) + .Unlocks(AbilityId.GreatEnchantment) + .HasUnlockDependencies(77, 78); +#endregion + +#region TIER4 +skillAugmentation.AddNode(80) + .Location(4, 31) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(79) + .HasQuestDependency(60200127); + +skillAugmentation.AddNode(81) + .Location(2, 32) + .BloodOrbCost(1650) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(80); +skillAugmentation.AddNode(82) + .Location(6, 32) + .BloodOrbCost(1650) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(80); + +skillAugmentation.AddNode(83) + .Location(1, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(81); +skillAugmentation.AddNode(84) + .Location(3, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(81); +skillAugmentation.AddNode(85) + .Location(5, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(82); +skillAugmentation.AddNode(86) + .Location(7, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(82); + +skillAugmentation.AddNode(87) + .Location(2, 34) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(84, 85); +skillAugmentation.AddNode(88) + .Location(4, 34) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(84, 85); +skillAugmentation.AddNode(89) + .Location(6, 34) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(84, 85); + +skillAugmentation.AddNode(90) + .Location(1, 35) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(83); +skillAugmentation.AddNode(91) + .Location(3, 35) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(92) + .Location(5, 35) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(93) + .Location(7, 35) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); + +skillAugmentation.AddNode(94) + .Location(2, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(87); +skillAugmentation.AddNode(95) + .Location(4, 36) + .BloodOrbCost(2500) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(96) + .Location(6, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(89); + +skillAugmentation.AddNode(97) + .Location(1, 37) + .BloodOrbCost(2700) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(90); +skillAugmentation.AddNode(98) + .Location(7, 37) + .BloodOrbCost(2700) + .Unlocks(OrbGainParamType.JobStaminaMax, 35) + .HasUnlockDependencies(93); + +skillAugmentation.AddNode(99) + .Location(2, 38) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(94, 97); +skillAugmentation.AddNode(100) + .Location(4, 38) + .BloodOrbCost(2800) + .Unlocks(AbilityId.SweepingSpearDestroyer) + .HasUnlockDependencies(91, 92); +skillAugmentation.AddNode(101) + .Location(6, 38) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(96, 98); + +skillAugmentation.AddNode(102) + .Location(3, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependencies(99); +skillAugmentation.AddNode(103) + .Location(5, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 10) + .HasUnlockDependencies(101); + +skillAugmentation.AddNode(104) + .Location(4, 40) + .BloodOrbCost(3200) + .Unlocks(AbilityId.SpiritHoard) + .HasUnlockDependencies(102, 103); +#endregion + +return skillAugmentation; diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/fighter.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/fighter.csx new file mode 100644 index 000000000..6f5f1f353 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/fighter.csx @@ -0,0 +1,622 @@ +public class SkillAugmentation : ISkillAugmentation +{ + public override JobId JobId => JobId.Fighter; +} + +var skillAugmentation = new SkillAugmentation(); + +#region TIER1 +skillAugmentation.AddNode(1) + .Location(4, 1) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasQuestDependency(60200100); + +skillAugmentation.AddNode(2) + .Location(4, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(1); + +skillAugmentation.AddNode(3) + .Location(3, 3) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(2); +skillAugmentation.AddNode(4) + .Location(5, 3) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(2); + +skillAugmentation.AddNode(5) + .Location(4, 4) + .BloodOrbCost(1200) + .Unlocks(CustomSkillId.PierceSlash) + .HasUnlockDependencies(3, 4); + +skillAugmentation.AddNode(6) + .Location(3, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(5); +skillAugmentation.AddNode(7) + .Location(5, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(5); + +skillAugmentation.AddNode(8) + .Location(2, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(6); +skillAugmentation.AddNode(9) + .Location(3, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(6); +skillAugmentation.AddNode(10) + .Location(5, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(7); +skillAugmentation.AddNode(11) + .Location(6, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(7); + +skillAugmentation.AddNode(12) + .Location(1, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(8); +skillAugmentation.AddNode(13) + .Location(2, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(8); +skillAugmentation.AddNode(14) + .Location(3, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(9); +skillAugmentation.AddNode(15) + .Location(5, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(10); +skillAugmentation.AddNode(16) + .Location(7, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(11); + +skillAugmentation.AddNode(17) + .Location(1, 8) + .BloodOrbCost(1200) + .Unlocks(AbilityId.OnslaughtSlayer) + .HasUnlockDependency(12); +skillAugmentation.AddNode(18) + .Location(2, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(13); +skillAugmentation.AddNode(19) + .Location(3, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(14); +skillAugmentation.AddNode(20) + .Location(5, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(15); +skillAugmentation.AddNode(21) + .Location(6, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(15); +skillAugmentation.AddNode(22) + .Location(7, 8) + .BloodOrbCost(1200) + .Unlocks(AbilityId.DemolishingStrikeSlayer) + .HasUnlockDependency(16); + +skillAugmentation.AddNode(23) + .Location(2, 9) + .BloodOrbCost(1700) + .Unlocks(AbilityId.GougeEradicate) + .HasUnlockDependency(18); +skillAugmentation.AddNode(24) + .Location(3, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependency(19); +skillAugmentation.AddNode(25) + .Location(5, 9) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(20); +skillAugmentation.AddNode(26) + .Location(6, 9) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(21); + +skillAugmentation.AddNode(27) + .Location(4, 10) + .BloodOrbCost(1800) + .Unlocks(AbilityId.CrushingBlow) + .HasUnlockDependencies(24, 25); +#endregion + +#region TIER2 +skillAugmentation.AddNode(28) + .Location(4, 11) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(27) + .HasQuestDependency(60200101); + +skillAugmentation.AddNode(29) + .Location(2, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(30) + .Location(4, 12) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(31) + .Location(6, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(32) + .Location(2, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(29); +skillAugmentation.AddNode(33) + .Location(3, 13) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobStaminaMax, 25) + .HasUnlockDependency(29); +skillAugmentation.AddNode(34) + .Location(4, 13) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(30); +skillAugmentation.AddNode(35) + .Location(5, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(31); +skillAugmentation.AddNode(36) + .Location(6, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(31); + +skillAugmentation.AddNode(37) + .Location(2, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(32); +skillAugmentation.AddNode(38) + .Location(4, 14) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(33, 34, 35); +skillAugmentation.AddNode(39) + .Location(6, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(36); + +skillAugmentation.AddNode(40) + .Location(2, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(37); +skillAugmentation.AddNode(41) + .Location(6, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(39); + +skillAugmentation.AddNode(42) + .Location(1, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(40); +skillAugmentation.AddNode(43) + .Location(2, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(40); +skillAugmentation.AddNode(44) + .Location(6, 16) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(41); +skillAugmentation.AddNode(45) + .Location(7, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(41); + +skillAugmentation.AddNode(46) + .Location(1, 17) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(42); +skillAugmentation.AddNode(47) + .Location(2, 17) + .BloodOrbCost(1700) + .Unlocks(AbilityId.DireOnslaughtSlayer) + .HasUnlockDependency(43); +skillAugmentation.AddNode(48) + .Location(6, 17) + .BloodOrbCost(1700) + .Unlocks(AbilityId.FirmShield) + .HasUnlockDependency(44); +skillAugmentation.AddNode(49) + .Location(7, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 25) + .HasUnlockDependency(45); + +skillAugmentation.AddNode(50) + .Location(2, 18) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(47, 48); +skillAugmentation.AddNode(51) + .Location(4, 18) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(47, 48); +skillAugmentation.AddNode(52) + .Location(6, 18) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(47, 48); + +skillAugmentation.AddNode(53) + .Location(3, 19) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(51); +skillAugmentation.AddNode(54) + .Location(5, 19) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(51); + +skillAugmentation.AddNode(55) + .Location(4, 20) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(53, 54); +#endregion + +#region TIER3 +skillAugmentation.AddNode(56) + .Location(2, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(55) + .HasQuestDependency(60200102); +skillAugmentation.AddNode(57) + .Location(4, 21) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(55) + .HasQuestDependency(60200102); +skillAugmentation.AddNode(58) + .Location(6, 21) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(55) + .HasQuestDependency(60200102); + +skillAugmentation.AddNode(59) + .Location(2, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(56); +skillAugmentation.AddNode(60) + .Location(3, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(57); +skillAugmentation.AddNode(61) + .Location(4, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(57); +skillAugmentation.AddNode(62) + .Location(5, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(57); +skillAugmentation.AddNode(63) + .Location(6, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(58); + +skillAugmentation.AddNode(64) + .Location(4, 23) + .BloodOrbCost(2300) + .Unlocks(CustomSkillId.FlowingShieldSpiral) + .HasUnlockDependencies(60, 61, 62); + +skillAugmentation.AddNode(65) + .Location(1, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(59); +skillAugmentation.AddNode(66) + .Location(2, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(59); +skillAugmentation.AddNode(67) + .Location(3, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(64); +skillAugmentation.AddNode(68) + .Location(4, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(64); +skillAugmentation.AddNode(69) + .Location(5, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(64); +skillAugmentation.AddNode(70) + .Location(6, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(63); +skillAugmentation.AddNode(71) + .Location(7, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(63); + +skillAugmentation.AddNode(72) + .Location(4, 25) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(68); + +skillAugmentation.AddNode(73) + .Location(2, 26) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(68); +skillAugmentation.AddNode(74) + .Location(4, 26) + .BloodOrbCost(2500) + .Unlocks(AbilityId.OnslaughtCrusher) + .HasUnlockDependency(68); +skillAugmentation.AddNode(75) + .Location(6, 26) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(68); + +skillAugmentation.AddNode(76) + .Location(3, 27) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(74); +skillAugmentation.AddNode(77) + .Location(5, 27) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(74); + +skillAugmentation.AddNode(78) + .Location(1, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.DemolishingStrikeExterminator) + .HasUnlockDependency(73); +skillAugmentation.AddNode(79) + .Location(2, 28) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(73); +skillAugmentation.AddNode(80) + .Location(4, 28) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(76, 77); +skillAugmentation.AddNode(81) + .Location(6, 28) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(75); +skillAugmentation.AddNode(82) + .Location(7, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.GougeCrusher) + .HasUnlockDependency(75); + +skillAugmentation.AddNode(83) + .Location(2, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(79); +skillAugmentation.AddNode(84) + .Location(6, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(81); + +skillAugmentation.AddNode(85) + .Location(4, 30) + .BloodOrbCost(3200) + .Unlocks(AbilityId.Hardening) + .HasUnlockDependencies(83, 84); +#endregion + +#region PAGE4 +skillAugmentation.AddNode(86) + .Location(4, 31) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(85) + .HasQuestDependency(60200103); + +skillAugmentation.AddNode(87) + .Location(1, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(88) + .Location(3, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(89) + .Location(4, 32) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(90) + .Location(5, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(91) + .Location(7, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(86); + +skillAugmentation.AddNode(92) + .Location(2, 33) + .BloodOrbCost(1850) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(93) + .Location(3, 33) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(94) + .Location(5, 33) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(90); +skillAugmentation.AddNode(95) + .Location(6, 33) + .BloodOrbCost(1850) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(90); + +skillAugmentation.AddNode(96) + .Location(2, 34) + .BloodOrbCost(2050) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(92, 93); +skillAugmentation.AddNode(97) + .Location(6, 34) + .BloodOrbCost(2050) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(94, 95); + +skillAugmentation.AddNode(98) + .Location(1, 35) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(87); +skillAugmentation.AddNode(99) + .Location(3, 35) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(89); +skillAugmentation.AddNode(100) + .Location(5, 35) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(89); +skillAugmentation.AddNode(101) + .Location(7, 35) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(91); + +skillAugmentation.AddNode(102) + .Location(2, 36) + .BloodOrbCost(2800) + .Unlocks(AbilityId.DireOnslaughtCrusher) + .HasUnlockDependencies(96, 98); +skillAugmentation.AddNode(103) + .Location(3, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(99); +skillAugmentation.AddNode(104) + .Location(5, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(100); +skillAugmentation.AddNode(105) + .Location(6, 36) + .BloodOrbCost(2800) + .Unlocks(AbilityId.PleasantThrust) + .HasUnlockDependencies(97, 101); + +skillAugmentation.AddNode(106) + .Location(2, 37) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(102, 103, 104, 105); +skillAugmentation.AddNode(107) + .Location(4, 37) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(102, 103, 104, 105); +skillAugmentation.AddNode(108) + .Location(6, 37) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(102, 103, 104, 105); + +skillAugmentation.AddNode(109) + .Location(3, 38) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(107); +skillAugmentation.AddNode(110) + .Location(5, 38) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(107); + +skillAugmentation.AddNode(111) + .Location(2, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(106, 109); +skillAugmentation.AddNode(112) + .Location(6, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 20) + .HasUnlockDependencies(108, 110); +#endregion + +return skillAugmentation; diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/high_scepter.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/high_scepter.csx new file mode 100644 index 000000000..3db994c4f --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/high_scepter.csx @@ -0,0 +1,348 @@ +public class SkillAugmentation : ISkillAugmentation +{ + public override JobId JobId => JobId.HighScepter; +} + +var skillAugmentation = new SkillAugmentation(); +// 1st Layer +skillAugmentation.AddNode(0) + .Location(4, 1) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasQuestDependency(60300400); + +// 2nd Layer +skillAugmentation.AddNode(1) + .Location(3, 2) + .BloodOrbCost(700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(0); +skillAugmentation.AddNode(2) + .Location(5, 2) + .BloodOrbCost(700) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(0); + +// 3rd Layer +skillAugmentation.AddNode(3) + .Location(2, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(1); +skillAugmentation.AddNode(4) + .Location(3, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(1); +skillAugmentation.AddNode(5) + .Location(5, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(2); +skillAugmentation.AddNode(6) + .Location(6, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(2); + +// 4th Layer +skillAugmentation.AddNode(7) + .Location(2, 4) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(3); +skillAugmentation.AddNode(8) + .Location(4, 4) + .BloodOrbCost(1000) + .Unlocks(CustomSkillId.EclipseBright) + .HasUnlockDependencies(4, 5); +skillAugmentation.AddNode(9) + .Location(6, 4) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(6); + +// 5th Layer +skillAugmentation.AddNode(10) + .Location(2, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(7); +skillAugmentation.AddNode(11) + .Location(3, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(7); + +skillAugmentation.AddNode(12) + .Location(5, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(9); +skillAugmentation.AddNode(13) + .Location(6, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(9); + +// 6th Layer +skillAugmentation.AddNode(14) + .Location(3, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(11); +skillAugmentation.AddNode(15) + .Location(5, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(12); + +// 7th Layer +skillAugmentation.AddNode(16) + .Location(1, 7) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 20) + .HasUnlockDependency(14); +skillAugmentation.AddNode(17) + .Location(3, 7) + .BloodOrbCost(1500) + .Unlocks(AbilityId.ArcSlashSlayer) + .HasUnlockDependency(14); +skillAugmentation.AddNode(18) + .Location(5, 7) + .BloodOrbCost(1500) + .Unlocks(AbilityId.SkySlashSlayer) + .HasUnlockDependency(15); +skillAugmentation.AddNode(19) + .Location(7, 7) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 20) + .HasUnlockDependency(15); + +// 8th Layer +skillAugmentation.AddNode(20) + .Location(1, 8) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(16); +skillAugmentation.AddNode(21) + .Location(2, 8) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(16); +skillAugmentation.AddNode(22) + .Location(4, 8) + .BloodOrbCost(1500) + .Unlocks(AbilityId.QuadrupleSlashSlayer) + .HasUnlockDependencies(17, 18); +skillAugmentation.AddNode(23) + .Location(6, 8) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(19); +skillAugmentation.AddNode(24) + .Location(7, 8) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(19); + +// 9th Layer +skillAugmentation.AddNode(25) + .Location(2, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(21); +skillAugmentation.AddNode(26) + .Location(6, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(23); + +// 10th Layer +skillAugmentation.AddNode(27) + .Location(1, 10) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2) + .HasUnlockDependency(20); +skillAugmentation.AddNode(28) + .Location(4, 10) + .BloodOrbCost(1800) + .Unlocks(AbilityId.FallingSlashSlayer) + .HasUnlockDependencies(25, 26); +skillAugmentation.AddNode(29) + .Location(7, 10) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2) + .HasUnlockDependency(24); + +// 11th Layer +skillAugmentation.AddNode(30) + .Location(4, 11) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(28); + +// 12th Layer +skillAugmentation.AddNode(31) + .Location(1, 12) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(30); +skillAugmentation.AddNode(32) + .Location(7, 12) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(30); + +// 13th Layer +skillAugmentation.AddNode(33) + .Location(1, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(31); +skillAugmentation.AddNode(34) + .Location(2, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(31); +skillAugmentation.AddNode(35) + .Location(3, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(31); +skillAugmentation.AddNode(36) + .Location(5, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(32); +skillAugmentation.AddNode(37) + .Location(6, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(32); +skillAugmentation.AddNode(38) + .Location(7, 13) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(32); + +// 14th Layer +skillAugmentation.AddNode(39) + .Location(1, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(33); +skillAugmentation.AddNode(40) + .Location(2, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(34); +skillAugmentation.AddNode(41) + .Location(3, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(35); +skillAugmentation.AddNode(42) + .Location(5, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(36); +skillAugmentation.AddNode(43) + .Location(6, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(37); +skillAugmentation.AddNode(44) + .Location(7, 14) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(38); + +// 15th Layer +skillAugmentation.AddNode(45) + .Location(1, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 2) + .HasUnlockDependency(39); +skillAugmentation.AddNode(46) + .Location(2, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(40); +skillAugmentation.AddNode(47) + .Location(6, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 50) + .HasUnlockDependency(43); +skillAugmentation.AddNode(48) + .Location(7, 15) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 2) + .HasUnlockDependency(44); + +// 16th Layer +skillAugmentation.AddNode(49) + .Location(1, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(45); +skillAugmentation.AddNode(50) + .Location(2, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(46); +skillAugmentation.AddNode(51) + .Location(6, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(47); +skillAugmentation.AddNode(52) + .Location(7, 16) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(48); + +// 17th Layer +skillAugmentation.AddNode(53) + .Location(1, 17) + .BloodOrbCost(3300) + .Unlocks(AbilityId.OrdinaryAttack) + .HasUnlockDependency(49); +skillAugmentation.AddNode(54) + .Location(7, 17) + .BloodOrbCost(3300) + .Unlocks(AbilityId.Respiration) + .HasUnlockDependency(52); + +// 18th Layer +skillAugmentation.AddNode(55) + .Location(2, 18) + .BloodOrbCost(3300) + .Unlocks(OrbGainParamType.JobMagicalAttack, 3) + .HasUnlockDependency(50); +skillAugmentation.AddNode(56) + .Location(6, 18) + .BloodOrbCost(3300) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 3) + .HasUnlockDependency(51); + +// 19th Layer +skillAugmentation.AddNode(57) + .Location(4, 19) + .BloodOrbCost(3300) + .Unlocks(OrbGainParamType.JobStaminaMax, 20) + .HasUnlockDependencies(55, 56); + +// 20th Layer +skillAugmentation.AddNode(58) + .Location(3, 20) + .BloodOrbCost(4000) + .Unlocks(OrbGainParamType.AllJobsMagicalAttack, 2) + .HasUnlockDependency(57); +skillAugmentation.AddNode(59) + .Location(5, 20) + .BloodOrbCost(4000) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 2) + .HasUnlockDependency(57); + +return skillAugmentation; diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/hunter.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/hunter.csx new file mode 100644 index 000000000..0df0e4440 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/hunter.csx @@ -0,0 +1 @@ +// TOOD: Needs to be implmeneted diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/priest.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/priest.csx new file mode 100644 index 000000000..0df0e4440 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/priest.csx @@ -0,0 +1 @@ +// TOOD: Needs to be implmeneted diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/seeker.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/seeker.csx new file mode 100644 index 000000000..cd3451f99 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/seeker.csx @@ -0,0 +1,683 @@ +public class SkillAugmentation : ISkillAugmentation +{ + public override JobId JobId => JobId.Seeker; +} + +var skillAugmentation = new SkillAugmentation(); + +#region PAGE1 +// 1st tier +skillAugmentation.AddNode(1) + .Location(4, 1) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasQuestDependency(60200116); + +// 2nd Tier +skillAugmentation.AddNode(2) + .Location(4, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(1); + +// 3rd Tier +skillAugmentation.AddNode(3) + .Location(3, 3) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(2); +skillAugmentation.AddNode(4) + .Location(5, 3) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(2); + +// 4th Tier +skillAugmentation.AddNode(5) + .Location(4, 4) + .BloodOrbCost(1200) + .Unlocks(CustomSkillId.PierceSlash) + .HasUnlockDependencies(3, 4); + +// 5th Tier +skillAugmentation.AddNode(6) + .Location(3, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(5); +skillAugmentation.AddNode(7) + .Location(5, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(5); + +// 6th Tier +skillAugmentation.AddNode(8) + .Location(2, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(6); +skillAugmentation.AddNode(9) + .Location(3, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(6); +skillAugmentation.AddNode(10) + .Location(5, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(7); +skillAugmentation.AddNode(11) + .Location(6, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(7); + +// 7th Tier +skillAugmentation.AddNode(12) + .Location(1, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(8); +skillAugmentation.AddNode(13) + .Location(2, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(8); +skillAugmentation.AddNode(14) + .Location(3, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(9); +skillAugmentation.AddNode(15) + .Location(5, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(10); +skillAugmentation.AddNode(16) + .Location(7, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(11); + +// 8th Tier +skillAugmentation.AddNode(17) + .Location(1, 8) + .BloodOrbCost(1200) + .Unlocks(AbilityId.OnslaughtSlayer) + .HasUnlockDependency(12); +skillAugmentation.AddNode(18) + .Location(2, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(13); +skillAugmentation.AddNode(19) + .Location(3, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(14); +skillAugmentation.AddNode(20) + .Location(5, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(15); +skillAugmentation.AddNode(21) + .Location(6, 8) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(15); +skillAugmentation.AddNode(22) + .Location(7, 8) + .BloodOrbCost(1200) + .Unlocks(AbilityId.DemolishingStrikeSlayer) + .HasUnlockDependency(16); + +// 9th Tier +skillAugmentation.AddNode(23) + .Location(2, 9) + .BloodOrbCost(1700) + .Unlocks(AbilityId.GougeEradicate) + .HasUnlockDependency(18); +skillAugmentation.AddNode(24) + .Location(3, 9) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependency(19); +skillAugmentation.AddNode(25) + .Location(5, 9) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(20); +skillAugmentation.AddNode(26) + .Location(6, 9) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(21); + +// 10th Tier +skillAugmentation.AddNode(27) + .Location(4, 10) + .BloodOrbCost(1800) + .Unlocks(AbilityId.CrushingBlow) + .HasUnlockDependencies(24, 25); +#endregion + +#region PAGE2 +// 11th Tier +skillAugmentation.AddNode(28) + .Location(4, 11) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(27) + .HasQuestDependency(60200117); + +// 12th Tier +skillAugmentation.AddNode(29) + .Location(2, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(30) + .Location(4, 12) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(31) + .Location(6, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(28); + +// 13th Tier +skillAugmentation.AddNode(32) + .Location(2, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(29); + +skillAugmentation.AddNode(33) + .Location(3, 13) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobStaminaMax, 25) + .HasUnlockDependency(29); + +skillAugmentation.AddNode(34) + .Location(4, 13) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(30); + +skillAugmentation.AddNode(35) + .Location(5, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(31); + +skillAugmentation.AddNode(36) + .Location(6, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(31); + +// 14th Tier +skillAugmentation.AddNode(37) + .Location(2, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(32); + +skillAugmentation.AddNode(38) + .Location(4, 14) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(33, 34, 35); + +skillAugmentation.AddNode(39) + .Location(6, 14) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(36); + +// 15th Tier +skillAugmentation.AddNode(40) + .Location(2, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(37); + +skillAugmentation.AddNode(41) + .Location(6, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(39); + +// 16th Tier +skillAugmentation.AddNode(42) + .Location(1, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(40); + +skillAugmentation.AddNode(43) + .Location(2, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(40); + +skillAugmentation.AddNode(44) + .Location(6, 16) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(41); + +skillAugmentation.AddNode(45) + .Location(7, 16) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(41); + +// 17th Tier +skillAugmentation.AddNode(46) + .Location(1, 17) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(42); + +skillAugmentation.AddNode(47) + .Location(2, 17) + .BloodOrbCost(1700) + .Unlocks(AbilityId.DireOnslaughtSlayer) + .HasUnlockDependency(43); + +skillAugmentation.AddNode(48) + .Location(6, 17) + .BloodOrbCost(1700) + .Unlocks(AbilityId.FirmShield) + .HasUnlockDependency(44); + +skillAugmentation.AddNode(49) + .Location(7, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 25) + .HasUnlockDependency(45); + +// 18th Tier +skillAugmentation.AddNode(50) + .Location(2, 18) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(47, 48); + +skillAugmentation.AddNode(51) + .Location(4, 18) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(47, 48); + +skillAugmentation.AddNode(52) + .Location(6, 18) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(47, 48); + +// 19th Tier +skillAugmentation.AddNode(53) + .Location(3, 19) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(51); + +skillAugmentation.AddNode(54) + .Location(5, 19) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 11) + .HasUnlockDependency(51); + +// 20th Tier +skillAugmentation.AddNode(55) + .Location(4, 20) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(53, 54); +#endregion + +#region PAGE3 +// 21st Tier +skillAugmentation.AddNode(56) + .Location(2, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(55) + .HasQuestDependency(60200118); + +skillAugmentation.AddNode(57) + .Location(4, 21) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(55) + .HasQuestDependency(60200102); + +skillAugmentation.AddNode(58) + .Location(6, 21) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(55) + .HasQuestDependency(60200102); + +// 22nd Tier +skillAugmentation.AddNode(59) + .Location(2, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(56); + +skillAugmentation.AddNode(60) + .Location(3, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 25) + .HasUnlockDependency(57); + +skillAugmentation.AddNode(61) + .Location(4, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(57); + +skillAugmentation.AddNode(62) + .Location(5, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(57); + +skillAugmentation.AddNode(63) + .Location(6, 22) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(58); + +// 23rd Tier +skillAugmentation.AddNode(64) + .Location(4, 23) + .BloodOrbCost(2300) + .Unlocks(CustomSkillId.FlowingShieldSpiral) + .HasUnlockDependencies(60, 61, 62); + +// 24th Tier +skillAugmentation.AddNode(65) + .Location(1, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(59); +skillAugmentation.AddNode(66) + .Location(2, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(59); +skillAugmentation.AddNode(67) + .Location(3, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(64); +skillAugmentation.AddNode(68) + .Location(4, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(64); +skillAugmentation.AddNode(69) + .Location(5, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(64); +skillAugmentation.AddNode(70) + .Location(6, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(63); +skillAugmentation.AddNode(71) + .Location(7, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(63); + +// 25th tier +skillAugmentation.AddNode(72) + .Location(4, 25) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(68); + +// 26th Tier +skillAugmentation.AddNode(73) + .Location(2, 26) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(68); +skillAugmentation.AddNode(74) + .Location(4, 26) + .BloodOrbCost(2500) + .Unlocks(AbilityId.OnslaughtCrusher) + .HasUnlockDependency(68); +skillAugmentation.AddNode(75) + .Location(6, 26) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(68); + +// 27th Tier +skillAugmentation.AddNode(76) + .Location(3, 27) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(74); +skillAugmentation.AddNode(77) + .Location(5, 27) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(74); + +// 28th Tier +skillAugmentation.AddNode(78) + .Location(1, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.DemolishingStrikeExterminator) + .HasUnlockDependency(73); +skillAugmentation.AddNode(79) + .Location(2, 28) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(73); +skillAugmentation.AddNode(80) + .Location(4, 28) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(76, 77); +skillAugmentation.AddNode(81) + .Location(6, 28) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(75); +skillAugmentation.AddNode(82) + .Location(7, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.GougeCrusher) + .HasUnlockDependency(75); + +// 29th Tier +skillAugmentation.AddNode(83) + .Location(2, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(79); +skillAugmentation.AddNode(84) + .Location(6, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(81); + +// 30th Tier +skillAugmentation.AddNode(85) + .Location(4, 30) + .BloodOrbCost(3200) + .Unlocks(AbilityId.Hardening) + .HasUnlockDependencies(83, 84); +#endregion + +#region PAGE4 +// 31st Tier +skillAugmentation.AddNode(86) + .Location(4, 31) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(85) + .HasQuestDependency(60200119); + +// 32nd Tier +skillAugmentation.AddNode(87) + .Location(1, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(88) + .Location(3, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(89) + .Location(4, 32) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(90) + .Location(5, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(91) + .Location(7, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(86); + +// 333rd Tier +skillAugmentation.AddNode(92) + .Location(2, 33) + .BloodOrbCost(1850) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(93) + .Location(3, 33) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(94) + .Location(5, 33) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(90); +skillAugmentation.AddNode(95) + .Location(6, 33) + .BloodOrbCost(1850) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(90); + +// 34th Tier +skillAugmentation.AddNode(96) + .Location(2, 34) + .BloodOrbCost(2050) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(92, 93); +skillAugmentation.AddNode(97) + .Location(6, 34) + .BloodOrbCost(2050) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(94, 95); + +// 35th Tier +skillAugmentation.AddNode(98) + .Location(1, 35) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(87); +skillAugmentation.AddNode(99) + .Location(3, 35) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(89); +skillAugmentation.AddNode(100) + .Location(5, 35) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(89); +skillAugmentation.AddNode(101) + .Location(7, 35) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(91); + +// 36th Tier +skillAugmentation.AddNode(102) + .Location(2, 36) + .BloodOrbCost(2800) + .Unlocks(AbilityId.DireOnslaughtCrusher) + .HasUnlockDependencies(96, 98); +skillAugmentation.AddNode(103) + .Location(3, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(99); +skillAugmentation.AddNode(104) + .Location(5, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(100); +skillAugmentation.AddNode(105) + .Location(6, 36) + .BloodOrbCost(2800) + .Unlocks(AbilityId.PleasantThrust) + .HasUnlockDependencies(97, 101); + +// 37th Tier +skillAugmentation.AddNode(106) + .Location(2, 37) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(102, 103, 104, 105); +skillAugmentation.AddNode(107) + .Location(4, 37) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(102, 103, 104, 105); +skillAugmentation.AddNode(108) + .Location(6, 37) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(102, 103, 104, 105); + +// 38th Tier +skillAugmentation.AddNode(109) + .Location(3, 38) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(107); +skillAugmentation.AddNode(110) + .Location(5, 38) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(107); + +// 39th Tier +skillAugmentation.AddNode(111) + .Location(2, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(106, 109); +skillAugmentation.AddNode(112) + .Location(6, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobHpMax, 20) + .HasUnlockDependencies(108, 110); +#endregion + +return skillAugmentation; diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/shield_sage.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/shield_sage.csx new file mode 100644 index 000000000..0df0e4440 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/shield_sage.csx @@ -0,0 +1 @@ +// TOOD: Needs to be implmeneted diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/sorcerer.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/sorcerer.csx new file mode 100644 index 000000000..0df0e4440 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/sorcerer.csx @@ -0,0 +1 @@ +// TOOD: Needs to be implmeneted diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/spirit_lancer.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/spirit_lancer.csx new file mode 100644 index 000000000..48c2f1e73 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/spirit_lancer.csx @@ -0,0 +1,580 @@ +public class SkillAugmentation : ISkillAugmentation +{ + public override JobId JobId => JobId.SpiritLancer; +} + +var skillAugmentation = new SkillAugmentation(); + +#region TIER1 +skillAugmentation.AddNode(1) + .Location(4, 1) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasQuestDependency(60200136); + +skillAugmentation.AddNode(2) + .Location(3, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(1); +skillAugmentation.AddNode(3) + .Location(4, 2) + .BloodOrbCost(700) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(1); +skillAugmentation.AddNode(4) + .Location(5, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(1); + +skillAugmentation.AddNode(5) + .Location(2, 3) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(2); +skillAugmentation.AddNode(6) + .Location(4, 3) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(3); +skillAugmentation.AddNode(7) + .Location(6, 3) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(4); + +skillAugmentation.AddNode(8) + .Location(1, 4) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(5); +skillAugmentation.AddNode(9) + .Location(4, 4) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(6); +skillAugmentation.AddNode(10) + .Location(7, 4) + .BloodOrbCost(1300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(7); + +skillAugmentation.AddNode(11) + .Location(2, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(5); +skillAugmentation.AddNode(12) + .Location(4, 5) + .BloodOrbCost(1100) + .Unlocks(CustomSkillId.CureGlasta) + .HasUnlockDependencies(9); +skillAugmentation.AddNode(13) + .Location(6, 5) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 10) + .HasUnlockDependencies(7); + +skillAugmentation.AddNode(14) + .Location(2, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(8, 11); +skillAugmentation.AddNode(15) + .Location(3, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(12); +skillAugmentation.AddNode(16) + .Location(5, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(12); +skillAugmentation.AddNode(17) + .Location(6, 6) + .BloodOrbCost(1450) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(10, 13); + +skillAugmentation.AddNode(18) + .Location(2, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(14, 15); +skillAugmentation.AddNode(19) + .Location(6, 7) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(16, 17); + +skillAugmentation.AddNode(20) + .Location(1, 8) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependencies(18); +skillAugmentation.AddNode(21) + .Location(3, 8) + .BloodOrbCost(1800) + .Unlocks(AbilityId.RushingSpearSlayer) + .HasUnlockDependencies(18); +skillAugmentation.AddNode(22) + .Location(5, 8) + .BloodOrbCost(1800) + .Unlocks(AbilityId.RisingSpearSlayer) + .HasUnlockDependencies(19); +skillAugmentation.AddNode(23) + .Location(7, 8) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependencies(19); + +skillAugmentation.AddNode(24) + .Location(4, 9) + .BloodOrbCost(1900) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(21, 22); + +skillAugmentation.AddNode(25) + .Location(3, 10) + .BloodOrbCost(2000) + .Unlocks(AbilityId.CrushingSpearSlayer) + .HasUnlockDependencies(20); +skillAugmentation.AddNode(26) + .Location(5, 10) + .BloodOrbCost(2000) + .Unlocks(AbilityId.Active) + .HasUnlockDependencies(23); +#endregion + +#region TIER2 +skillAugmentation.AddNode(27) + .Location(4, 11) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(25, 26) + .HasQuestDependency(60200137); + +skillAugmentation.AddNode(28) + .Location(3, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(27); +skillAugmentation.AddNode(29) + .Location(4, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(27); +skillAugmentation.AddNode(30) + .Location(5, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(27); + +skillAugmentation.AddNode(31) + .Location(3, 13) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(28); +skillAugmentation.AddNode(32) + .Location(4, 13) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(29); +skillAugmentation.AddNode(33) + .Location(5, 13) + .BloodOrbCost(1100) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(30); + +skillAugmentation.AddNode(34) + .Location(3, 14) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(31); +skillAugmentation.AddNode(35) + .Location(4, 14) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(32); +skillAugmentation.AddNode(36) + .Location(5, 14) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(33); + +skillAugmentation.AddNode(37) + .Location(3, 15) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(34); +skillAugmentation.AddNode(38) + .Location(4, 15) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(35); +skillAugmentation.AddNode(39) + .Location(5, 15) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(36); + +skillAugmentation.AddNode(40) + .Location(3, 16) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(37); +skillAugmentation.AddNode(41) + .Location(4, 16) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(38); +skillAugmentation.AddNode(42) + .Location(5, 16) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(39); + +skillAugmentation.AddNode(43) + .Location(1, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(40); +skillAugmentation.AddNode(44) + .Location(4, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(41); +skillAugmentation.AddNode(45) + .Location(7, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(42); + +skillAugmentation.AddNode(46) + .Location(2, 18) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(43); +skillAugmentation.AddNode(47) + .Location(4, 18) + .BloodOrbCost(1800) + .Unlocks(AbilityId.SweepingSpearSlayer) + .HasUnlockDependencies(44); +skillAugmentation.AddNode(48) + .Location(6, 18) + .BloodOrbCost(1700) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(45); + +skillAugmentation.AddNode(49) + .Location(3, 19) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(46); +skillAugmentation.AddNode(50) + .Location(5, 19) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(48); + +skillAugmentation.AddNode(51) + .Location(4, 20) + .BloodOrbCost(2000) + .Unlocks(AbilityId.ElementalDefense) + .HasUnlockDependencies(49, 50); +#endregion + +#region TIER3 +skillAugmentation.AddNode(52) + .Location(2, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(51) + .HasQuestDependency(60200138); +skillAugmentation.AddNode(53) + .Location(6, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(51) + .HasQuestDependency(60200138); + +skillAugmentation.AddNode(54) + .Location(1, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(52); +skillAugmentation.AddNode(55) + .Location(3, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(52); +skillAugmentation.AddNode(56) + .Location(5, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(53); +skillAugmentation.AddNode(57) + .Location(7, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(53); + +skillAugmentation.AddNode(58) + .Location(2, 23) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(54); +skillAugmentation.AddNode(59) + .Location(4, 23) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(55, 56); +skillAugmentation.AddNode(60) + .Location(6, 23) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(57); + +skillAugmentation.AddNode(61) + .Location(2, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(58); +skillAugmentation.AddNode(62) + .Location(4, 24) + .BloodOrbCost(2300) + .Unlocks(CustomSkillId.ScriosGuard) + .HasUnlockDependencies(59); +skillAugmentation.AddNode(63) + .Location(6, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(60); + +skillAugmentation.AddNode(64) + .Location(1, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(61); +skillAugmentation.AddNode(65) + .Location(3, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(61); +skillAugmentation.AddNode(66) + .Location(5, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(63); +skillAugmentation.AddNode(67) + .Location(7, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(63); + +skillAugmentation.AddNode(68) + .Location(2, 26) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependencies(64); +skillAugmentation.AddNode(69) + .Location(4, 26) + .BloodOrbCost(2500) + .Unlocks(AbilityId.RushingSpearDestroyer) + .HasUnlockDependencies(65, 66); +skillAugmentation.AddNode(70) + .Location(6, 26) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependencies(67); + +skillAugmentation.AddNode(71) + .Location(3, 27) + .BloodOrbCost(2150) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(69); +skillAugmentation.AddNode(72) + .Location(5, 27) + .BloodOrbCost(2150) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(69); + +skillAugmentation.AddNode(73) + .Location(1, 28) + .BloodOrbCost(2750) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(68); +skillAugmentation.AddNode(74) + .Location(3, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.RisingSpearDestroyer) + .HasUnlockDependencies(71); +skillAugmentation.AddNode(75) + .Location(5, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.CrushingSpearDestroyer) + .HasUnlockDependencies(72); +skillAugmentation.AddNode(76) + .Location(7, 28) + .BloodOrbCost(2750) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(70); + +skillAugmentation.AddNode(77) + .Location(2, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependencies(73); +skillAugmentation.AddNode(78) + .Location(6, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 10) + .HasUnlockDependencies(76); + +skillAugmentation.AddNode(79) + .Location(4, 30) + .BloodOrbCost(3200) + .Unlocks(AbilityId.GreatEnchantment) + .HasUnlockDependencies(77, 78); +#endregion + +#region TIER4 +skillAugmentation.AddNode(80) + .Location(4, 31) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(79) + .HasQuestDependency(60200139); + +skillAugmentation.AddNode(81) + .Location(2, 32) + .BloodOrbCost(1650) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(80); +skillAugmentation.AddNode(82) + .Location(6, 32) + .BloodOrbCost(1650) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(80); + +skillAugmentation.AddNode(83) + .Location(1, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(81); +skillAugmentation.AddNode(84) + .Location(3, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(81); +skillAugmentation.AddNode(85) + .Location(5, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(82); +skillAugmentation.AddNode(86) + .Location(7, 33) + .BloodOrbCost(1950) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(82); + +skillAugmentation.AddNode(87) + .Location(2, 34) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(84, 85); +skillAugmentation.AddNode(88) + .Location(4, 34) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(84, 85); +skillAugmentation.AddNode(89) + .Location(6, 34) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(84, 85); + +skillAugmentation.AddNode(90) + .Location(1, 35) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(83); +skillAugmentation.AddNode(91) + .Location(3, 35) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(92) + .Location(5, 35) + .BloodOrbCost(2900) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(93) + .Location(7, 35) + .BloodOrbCost(2400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); + +skillAugmentation.AddNode(94) + .Location(2, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(87); +skillAugmentation.AddNode(95) + .Location(4, 36) + .BloodOrbCost(2500) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(96) + .Location(6, 36) + .BloodOrbCost(2600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(89); + +skillAugmentation.AddNode(97) + .Location(1, 37) + .BloodOrbCost(2700) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(90); +skillAugmentation.AddNode(98) + .Location(7, 37) + .BloodOrbCost(2700) + .Unlocks(OrbGainParamType.JobStaminaMax, 35) + .HasUnlockDependencies(93); + +skillAugmentation.AddNode(99) + .Location(2, 38) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(94, 97); +skillAugmentation.AddNode(100) + .Location(4, 38) + .BloodOrbCost(2800) + .Unlocks(AbilityId.SweepingSpearDestroyer) + .HasUnlockDependencies(91, 92); +skillAugmentation.AddNode(101) + .Location(6, 38) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(96, 98); + +skillAugmentation.AddNode(102) + .Location(3, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependencies(99); +skillAugmentation.AddNode(103) + .Location(5, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsStaminaMax, 10) + .HasUnlockDependencies(101); + +skillAugmentation.AddNode(104) + .Location(4, 40) + .BloodOrbCost(3200) + .Unlocks(AbilityId.SpiritHoard) + .HasUnlockDependencies(102, 103); +#endregion + +return skillAugmentation; diff --git a/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/warrior.csx b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/warrior.csx new file mode 100644 index 000000000..c89b6a6eb --- /dev/null +++ b/Arrowgene.Ddon.Shared/Files/Assets/scripts/skill_augmentation/warrior.csx @@ -0,0 +1,639 @@ +public class SkillAugmentation : ISkillAugmentation +{ + public override JobId JobId => JobId.Warrior; +} + +var skillAugmentation = new SkillAugmentation(); + +#region TIER1 +skillAugmentation.AddNode(1) + .Location(4, 1) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasQuestDependency(60200128); + +skillAugmentation.AddNode(2) + .Location(4, 2) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 2) + .HasUnlockDependency(1); + +skillAugmentation.AddNode(3) + .Location(3, 3) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(2); +skillAugmentation.AddNode(4) + .Location(5, 3) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(2); + +skillAugmentation.AddNode(5) + .Location(4, 4) + .BloodOrbCost(1200) + .Unlocks(CustomSkillId.GreatGougingFang) + .HasUnlockDependencies(3, 4); + +skillAugmentation.AddNode(6) + .Location(3, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(5); +skillAugmentation.AddNode(7) + .Location(5, 5) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(5); + +skillAugmentation.AddNode(8) + .Location(2, 6) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(6); +skillAugmentation.AddNode(9) + .Location(3, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(6); +skillAugmentation.AddNode(10) + .Location(5, 6) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(7); +skillAugmentation.AddNode(11) + .Location(6, 6) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(7); + +skillAugmentation.AddNode(12) + .Location(1, 7) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(8); +skillAugmentation.AddNode(13) + .Location(2, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(8); +skillAugmentation.AddNode(14) + .Location(3, 7) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(9); +skillAugmentation.AddNode(15) + .Location(5, 7) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(10); +skillAugmentation.AddNode(16) + .Location(7, 7) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobStaminaMax, 15) + .HasUnlockDependency(11); + +skillAugmentation.AddNode(17) + .Location(1, 8) + .BloodOrbCost(1200) + .Unlocks(AbilityId.HackSlayer) + .HasUnlockDependency(12); +skillAugmentation.AddNode(18) + .Location(2, 8) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(13); +skillAugmentation.AddNode(19) + .Location(3, 8) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(14); +skillAugmentation.AddNode(20) + .Location(5, 8) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobMagicalAttack, 2) + .HasUnlockDependency(15); +skillAugmentation.AddNode(21) + .Location(6, 8) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(15); +skillAugmentation.AddNode(22) + .Location(7, 8) + .BloodOrbCost(1700) + .Unlocks(AbilityId.SavageLashEradicate) + .HasUnlockDependency(16); + +skillAugmentation.AddNode(23) + .Location(2, 9) + .BloodOrbCost(1700) + .Unlocks(AbilityId.InverseSlashCrusher) + .HasUnlockDependency(18); +skillAugmentation.AddNode(24) + .Location(3, 9) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(19); +skillAugmentation.AddNode(25) + .Location(5, 9) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(20); +skillAugmentation.AddNode(26) + .Location(6, 9) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.AllJobsHpMax, 30) + .HasUnlockDependency(21); + +skillAugmentation.AddNode(27) + .Location(4, 10) + .BloodOrbCost(1800) + .Unlocks(AbilityId.Brandish) + .HasUnlockDependencies(24, 25); +#endregion + +#region TIER2 +skillAugmentation.AddNode(28) + .Location(4, 11) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(27) + .HasQuestDependency(60200129); + +skillAugmentation.AddNode(29) + .Location(2, 12) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(30) + .Location(4, 12) + .BloodOrbCost(500) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(31) + .Location(6, 12) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(28); + +skillAugmentation.AddNode(32) + .Location(2, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(29); + +skillAugmentation.AddNode(33) + .Location(3, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(29); + +skillAugmentation.AddNode(34) + .Location(4, 13) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(30); + +skillAugmentation.AddNode(35) + .Location(5, 13) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(31); + +skillAugmentation.AddNode(36) + .Location(6, 13) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(31); + +skillAugmentation.AddNode(37) + .Location(2, 14) + .BloodOrbCost(800) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(32); + +skillAugmentation.AddNode(38) + .Location(4, 14) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(33, 34, 35); + +skillAugmentation.AddNode(39) + .Location(6, 14) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(36); + +skillAugmentation.AddNode(40) + .Location(2, 15) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(37); + +skillAugmentation.AddNode(41) + .Location(6, 15) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(39); + +skillAugmentation.AddNode(42) + .Location(1, 16) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(40); + +skillAugmentation.AddNode(43) + .Location(2, 16) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(40); + +skillAugmentation.AddNode(44) + .Location(6, 16) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(41); + +skillAugmentation.AddNode(45) + .Location(7, 16) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(41); + +skillAugmentation.AddNode(46) + .Location(1, 17) + .BloodOrbCost(1000) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependency(42); + +skillAugmentation.AddNode(47) + .Location(2, 17) + .BloodOrbCost(1700) + .Unlocks(AbilityId.DevastateSlayer) + .HasUnlockDependency(43); + +skillAugmentation.AddNode(48) + .Location(6, 17) + .BloodOrbCost(1700) + .Unlocks(AbilityId.AttackCover) + .HasUnlockDependency(44); + +skillAugmentation.AddNode(49) + .Location(7, 17) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(45); + +skillAugmentation.AddNode(50) + .Location(2, 18) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.AllJobsHpMax, 25) + .HasUnlockDependencies(47, 48); + +skillAugmentation.AddNode(51) + .Location(4, 18) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(47, 48); + +skillAugmentation.AddNode(52) + .Location(6, 18) + .BloodOrbCost(1200) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(47, 48); + +skillAugmentation.AddNode(53) + .Location(3, 19) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(51); + +skillAugmentation.AddNode(54) + .Location(5, 19) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(51); + +skillAugmentation.AddNode(55) + .Location(4, 20) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(53, 54); +#endregion + +#region TIER3 +skillAugmentation.AddNode(56) + .Location(2, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(55) + .HasQuestDependency(60200130); +skillAugmentation.AddNode(57) + .Location(4, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(55) + .HasQuestDependency(60200130); +skillAugmentation.AddNode(58) + .Location(6, 21) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(55) + .HasQuestDependency(60200130); + +skillAugmentation.AddNode(59) + .Location(2, 22) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(56); +skillAugmentation.AddNode(60) + .Location(3, 22) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(57); +skillAugmentation.AddNode(61) + .Location(4, 22) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(57); + +skillAugmentation.AddNode(62) + .Location(5, 22) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(57); +skillAugmentation.AddNode(63) + .Location(6, 22) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(58); + +skillAugmentation.AddNode(64) + .Location(4, 23) + .BloodOrbCost(2300) + .Unlocks(CustomSkillId.EarthquakeFang) + .HasUnlockDependencies(60, 61, 62); + +skillAugmentation.AddNode(65) + .Location(1, 24) + .BloodOrbCost(1650) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(59); +skillAugmentation.AddNode(66) + .Location(2, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(59); +skillAugmentation.AddNode(67) + .Location(3, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobHpMax, 30) + .HasUnlockDependency(64); +skillAugmentation.AddNode(68) + .Location(4, 24) + .BloodOrbCost(1650) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependency(64); +skillAugmentation.AddNode(69) + .Location(5, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(64); +skillAugmentation.AddNode(70) + .Location(6, 24) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(63); +skillAugmentation.AddNode(71) + .Location(7, 24) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependency(63); + +skillAugmentation.AddNode(72) + .Location(4, 25) + .BloodOrbCost(2000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(68); + +skillAugmentation.AddNode(73) + .Location(2, 26) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(68); +skillAugmentation.AddNode(74) + .Location(4, 26) + .BloodOrbCost(2500) + .Unlocks(AbilityId.HackCrusher) + .HasUnlockDependency(68); +skillAugmentation.AddNode(75) + .Location(6, 26) + .BloodOrbCost(1800) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependency(68); + +skillAugmentation.AddNode(76) + .Location(3, 27) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(74); +skillAugmentation.AddNode(77) + .Location(5, 27) + .BloodOrbCost(2200) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependency(74); + +skillAugmentation.AddNode(78) + .Location(1, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.InverseSlashExterminator) + .HasUnlockDependency(73); +skillAugmentation.AddNode(79) + .Location(2, 28) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependency(73); +skillAugmentation.AddNode(80) + .Location(4, 28) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(76, 77); +skillAugmentation.AddNode(81) + .Location(6, 28) + .BloodOrbCost(2300) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependency(75); +skillAugmentation.AddNode(82) + .Location(7, 28) + .BloodOrbCost(2800) + .Unlocks(AbilityId.SavageLashCrusher) + .HasUnlockDependency(75); + +skillAugmentation.AddNode(83) + .Location(2, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsHpMax, 20) + .HasUnlockDependency(79); +skillAugmentation.AddNode(84) + .Location(6, 29) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependency(81); + +skillAugmentation.AddNode(85) + .Location(4, 30) + .BloodOrbCost(3200) + .Unlocks(AbilityId.GreatGrasp) + .HasUnlockDependencies(83, 84); +#endregion + +#region TIER4 +skillAugmentation.AddNode(86) + .Location(4, 31) + .BloodOrbCost(1400) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(85) + .HasQuestDependency(60200131); + +skillAugmentation.AddNode(87) + .Location(1, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(88) + .Location(3, 32) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(89) + .Location(4, 32) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(90) + .Location(5, 32) + .BloodOrbCost(1500) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(86); +skillAugmentation.AddNode(91) + .Location(7, 32) + .BloodOrbCost(1600) + .Unlocks(OrbGainParamType.JobHpMax, 25) + .HasUnlockDependencies(86); + +skillAugmentation.AddNode(92) + .Location(2, 33) + .BloodOrbCost(1850) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(93) + .Location(3, 33) + .BloodOrbCost(1900) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(88); +skillAugmentation.AddNode(94) + .Location(5, 33) + .BloodOrbCost(1900) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(90); +skillAugmentation.AddNode(95) + .Location(6, 33) + .BloodOrbCost(1850) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(90); + +skillAugmentation.AddNode(96) + .Location(2, 34) + .BloodOrbCost(2150) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(92, 93); +skillAugmentation.AddNode(97) + .Location(6, 34) + .BloodOrbCost(2150) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(94, 95); + +skillAugmentation.AddNode(98) + .Location(1, 35) + .BloodOrbCost(2100) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(87); +skillAugmentation.AddNode(99) + .Location(3, 35) + .BloodOrbCost(2050) + .Unlocks(OrbGainParamType.JobMagicalAttack, 1) + .HasUnlockDependencies(89); +skillAugmentation.AddNode(100) + .Location(5, 35) + .BloodOrbCost(2050) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(89); +skillAugmentation.AddNode(101) + .Location(7, 35) + .BloodOrbCost(2100) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(91); + +skillAugmentation.AddNode(102) + .Location(2, 36) + .BloodOrbCost(2800) + .Unlocks(AbilityId.DevastateCrusher) + .HasUnlockDependencies(96, 98); +skillAugmentation.AddNode(103) + .Location(3, 36) + .BloodOrbCost(2500) + .Unlocks(OrbGainParamType.JobPhysicalDefence, 1) + .HasUnlockDependencies(99); +skillAugmentation.AddNode(104) + .Location(5, 36) + .BloodOrbCost(2500) + .Unlocks(OrbGainParamType.JobMagicalDefence, 1) + .HasUnlockDependencies(100); +skillAugmentation.AddNode(105) + .Location(6, 36) + .BloodOrbCost(2800) + .Unlocks(AbilityId.ExcessGrudge) + .HasUnlockDependencies(97, 101); + +skillAugmentation.AddNode(106) + .Location(2, 37) + .BloodOrbCost(2700) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(102, 103, 104, 105); +skillAugmentation.AddNode(107) + .Location(4, 37) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobPhysicalAttack, 1) + .HasUnlockDependencies(102, 103, 104, 105); +skillAugmentation.AddNode(108) + .Location(6, 37) + .BloodOrbCost(2700) + .Unlocks(OrbGainParamType.JobHpMax, 35) + .HasUnlockDependencies(102, 103, 104, 105); + +skillAugmentation.AddNode(109) + .Location(3, 38) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(107); +skillAugmentation.AddNode(110) + .Location(5, 38) + .BloodOrbCost(3000) + .Unlocks(OrbGainParamType.JobStaminaMax, 10) + .HasUnlockDependencies(107); + +skillAugmentation.AddNode(111) + .Location(2, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsHpMax, 20) + .HasUnlockDependencies(106, 109); +skillAugmentation.AddNode(112) + .Location(6, 39) + .BloodOrbCost(2800) + .Unlocks(OrbGainParamType.AllJobsPhysicalAttack, 1) + .HasUnlockDependencies(108, 110); +#endregion + +return skillAugmentation; diff --git a/Arrowgene.Ddon.Shared/Model/Ability.cs b/Arrowgene.Ddon.Shared/Model/Ability.cs index 43b518f79..378d93afa 100644 --- a/Arrowgene.Ddon.Shared/Model/Ability.cs +++ b/Arrowgene.Ddon.Shared/Model/Ability.cs @@ -41,4 +41,4 @@ public CDataLearnedSetAcquirementParam AsCDataLearnedSetAcquirementParam() }; } } -} \ No newline at end of file +} diff --git a/Arrowgene.Ddon.Shared/Model/AbilityId.cs b/Arrowgene.Ddon.Shared/Model/AbilityId.cs new file mode 100644 index 000000000..7068cc092 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Model/AbilityId.cs @@ -0,0 +1,507 @@ +namespace Arrowgene.Ddon.Shared.Model +{ + public enum AbilityId : uint + { + None = 0, + AgileMotion = 1, + DireGouge = 2, + CrushReceive = 3, + Counter0 = 4, + CounterExtension = 5, + AdvantageousFeeling = 6, + Onslaught = 7, + CombatMomentum = 8, + Exhilaration = 9, + BraveEffort = 10, + StrongShield = 11, + HeavyShield = 12, + TopplingShield = 13, + Overpower = 14, + Fitness = 15, + Egression = 16, + Obstinacy = 17, + SteadfastStand = 18, + NullifyingDefense = 19, + Resilience = 20, + Fortitude = 21, + DemihumanSafeguard = 22, + DemihumanProficiency = 23, + SoftSafeguard = 24, + SoftProficiency = 25, + Damping = 26, + Precision = 27, + ReloadForce = 28, + ArrowIncrease = 29, + Concentration = 30, + SkilledReload = 31, + AggressionArrow = 32, + PerfectReload = 33, + DelayedExplosion = 34, + MenacingForm = 35, + SturdyForm = 36, + AttackExpansion = 37, + PleasantAttack = 38, + HeartShot = 39, + HerculeanStrength = 40, + Enhancement = 41, + HiddenPotential = 42, + Hardy = 43, + ToughSkin = 44, + DecisiveShot = 45, + ShadowAttack = 46, + WingedSafeguard = 47, + WingedProficiency = 48, + OgreSafeguard = 49, + OgreProficiency = 50, + RelaxedCure = 51, + SpiritOverflow = 52, + Compassion = 53, + LongExposure = 54, + AttackAid = 55, + MagickAid = 56, + AssistDefense = 57, + AssistMagick = 58, + Encouragement = 59, + DivineProtection = 60, + Patience = 61, + Fireproof = 62, + Iceproof = 63, + Thunderproof = 64, + Holyproof = 65, + Darkproof = 66, + ReduceBurn = 67, + ReduceFreeze0 = 68, + ReduceShock = 69, + ReduceHolyDrain = 70, + ReduceBlind0 = 71, + UndeadSafeguard = 72, + UndeadProficiency = 73, + SkeletonSafeguard = 74, + SkeletonProficiency = 75, + Absorption = 76, + Trickle = 77, + GreatAbsorption = 78, + Prominence = 79, + ViolentRelease = 80, + Supercharge = 81, + Counter1 = 82, + DividedStrength = 83, + FrugalDefense = 84, + Adamance = 85, + Denial = 86, + Prescience = 87, + Solid = 88, + VibrantDefense = 89, + InstantRecovery0 = 90, + Robust = 91, + FiredUp = 92, + Sanctuary = 93, + GreatVigor = 94, + Dedication = 95, + Perseverance = 96, + HolyBody = 97, + Invigorated = 98, + Perky = 99, + EasedBlade = 100, + Longline = 101, + RopeReversal = 102, + SpinAvoid = 103, + HighJump = 104, + ArmStrength = 105, + TremorProof = 106, + FuriousGrip = 107, + Quakemaker = 108, + LeapGrip = 109, + EnduringGrip = 110, + Adhesion0 = 111, + Adhesion1 = 112, + FlyingEvasion = 113, + SuperiorEvasion = 114, + CalmEvasion = 115, + ReverseStance = 116, + SkyHammer = 117, + DestructiveFall = 118, + FlipResistance = 119, + JumpProficiency = 120, + LightRecoil = 121, + SoundLanding = 122, + AssistedHighJump = 123, + GiantSafeguard = 124, + GiantProficiency = 125, + BreakFormation = 126, + SpiritChant = 127, + GracefulChant = 128, + ContinuedChant = 129, + FireAttack = 130, + IceAttack = 131, + ThunderAttack = 132, + HolyAttack = 133, + DarkAttack = 134, + TwinMagick = 135, + MagickBoost = 136, + Equanimity = 137, + Calmness = 138, + CourageousCast = 139, + PersistentCast = 140, + MagickEnergy = 141, + ComfortableLevitate = 142, + ExtendedLevitate = 143, + IgnoreIntimidation = 144, + DemonSafeguard = 145, + DemonProficiency = 146, + CursedSafeguard = 147, + CursedProficiency = 148, + HumanSafeguard = 149, + HumanoidProficiency = 150, + UnitedEnergy = 151, + LengthyAssistance = 152, + QuickArrow = 153, + AidExtension = 154, + PersistentArrow = 155, + HealExtension = 156, + HealThyself = 157, + QuickHealing0 = 158, + RecoveryBurst = 159, + LifeEnergizer = 160, + LifeSpark = 161, + SelfFeedback = 162, + Mending = 163, + DeathlyDevour = 164, + QuickHealing1 = 165, + VergeofDeath = 166, + FireAffinity = 167, + IceAffinity = 168, + ThunderAffinity = 169, + HolyAffinity = 170, + DarkAffinity = 171, + SpiritSafeguard = 172, + SpiritProficiency = 173, + ConstructSafeguard = 174, + ConstructProficiency = 175, + Aggression = 176, + OverflowingHatred = 177, + Malice = 178, + ProlongedHatred = 179, + Mangle = 180, + FirstStrike = 181, + Weighted = 182, + Violence = 183, + UndyingForce = 184, + InnerStrength = 185, + HeavyAttack = 186, + BraveAttack = 187, + ForcedAttack = 188, + FightingSpirit = 189, + UnyieldingPosture = 190, + Ferocity = 191, + ForcedEndure = 192, + Resolute = 193, + FullBodied = 194, + HardBody = 195, + Ambition = 196, + HeavySteps = 197, + DeftFooting = 198, + BestialInstinct = 199, + BeastProficiency = 200, + Challenger = 201, + AlchemicalInvasion = 202, + ProlongedLure = 203, + WellPracticed = 204, + LivelyRomp = 205, + ViciousVision = 206, + FlourishingHealing = 207, + CalmingVision = 208, + DiscreetHealing = 209, + TenderTouch = 210, + Apparentness = 211, + Diminishing = 212, + VigorousVitality = 213, + MajesticMight = 214, + Relaxedness = 215, + Encouraged = 216, + CordialClimb = 217, + InstantRecovery1 = 218, + SoulStealer = 219, + HeroicSpirit = 220, + PolishedPoise = 221, + AlchemizedSafeguard = 222, + AlchemizedProficiency = 223, + DragonkinSafeguard = 224, + DragonkinProficiency = 225, + TreasureEye = 226, + Willpower = 227, + Gathering = 228, + ExpertExcavator = 229, + Flow = 230, + SoftTouch = 231, + ExtendedSprings = 232, + Featherfoot = 233, + SafeLanding = 234, + Efficacy = 235, + EnhancedThrow = 236, + EffectExtension = 237, + Rakshasa = 238, + Yasha = 239, + NewAttack = 240, + NewDefense = 241, + MoonlightAssault = 242, + MoonlightDefense = 243, + RainAttack = 244, + RainDefense = 245, + AMansHeart = 246, + AWomansHeart = 247, + ResistPoison = 248, + Antislow = 249, + Antisleep = 250, + AntiStun = 251, + AntiDrench = 252, + AntiOil = 253, + AntiSeal = 254, + AntiSubdue = 255, + AntiPetrify = 256, + AntiGoldify = 257, + ClosetoFire = 258, + ClosetoIce = 259, + ClosetoThunder = 260, + ClosetoHoly = 261, + ClosetoDark = 262, + ControlPoison = 263, + ControlSlow = 264, + ControlSleep = 265, + ControlStun = 266, + QuickDrying = 267, + QuickClean = 268, + QuickSeal = 269, + ReduceSubdue = 270, + ReducePetrify = 271, + ReduceGoldify = 272, + ReduceTar = 273, + ReduceFreeze1 = 274, + ReduceBlind1 = 275, + ReduceFire = 276, + ReduceIce = 277, + ReduceThunder = 278, + ReduceHoly = 279, + ReduceDark = 280, + ReducePhysicalAttackDown = 281, + ReduceDefenseDown = 282, + ReduceMagickAttackDown = 283, + ReduceMagickDefenseDown = 284, + IncreasedHonor = 285, + SpiritualOffering = 286, + HonouringMasters = 287, + Admired = 288, + Prizewinner = 289, + TeamPlayer = 290, + MusicHunter = 291, + MusicMayCry = 292, + MusicFighter = 293, + WilyMusic = 294, + MusicnGoblins = 295, + OnslaughtSlayer = 296, + DemolishingStrikeSlayer = 297, + CrushingBlow = 298, + GougeEradicate = 299, + DireOnslaughtSlayer = 300, + FirmShield = 301, + OnslaughtCrusher = 302, + DemolishingStrikeExterminator = 303, + Hardening = 304, + GougeCrusher = 305, + DireOnslaughtCrusher = 306, + PleasantThrust = 307, + ArcherySlayer = 308, + ExplodingArrowFury = 309, + RigidStance = 310, + ArrowheadStrikeFury = 311, + KeensightShotSlayer = 312, + RescueAssistance = 313, + ArcheryCrusher = 314, + ExplodingArrowCrusher = 315, + AugmentedSpirit = 316, + ArrowheadStrikeCrusher = 317, + KeensightCrusher = 318, + ClimaxBow = 319, + HealingChant = 320, + BlastBitsSlayer = 321, + AssistBoost = 322, + SaintAuraSlayer = 323, + ShockwaveSlayer = 324, + Stagnation = 325, + HealAuraEndurer = 326, + BlastBitsCrusher = 327, + MagickalRush = 328, + HolyAuraSavage = 329, + ShockwaveCrusher = 330, + HardSpirit = 331, + ShieldbashSlayer = 332, + WeaklightFury = 333, + ProtectedMend = 334, + ShieldCounterSavage = 335, + ForceBurstCrush = 336, + Attention = 337, + ShieldBlowCrusher = 338, + WeakLightCrusher = 339, + ShieldCollapse = 340, + ShieldSequenceCrusher = 341, + ForceBurstSlayer = 342, + PleasantSight = 343, + CarveSlayer = 344, + ScarletKissesSlayer = 345, + EnduringSprint = 346, + RoundhouseKickSlayer = 347, + ScarletSlashesCrush = 348, + DeepAggression = 349, + CarveCrusher = 350, + ScarletKissesCrusher = 351, + Stiffness = 352, + RoundhouseKickCrusher = 353, + ScarletSlashesExterminator = 354, + PleasantRoll = 355, + MagickBoltSlayer = 356, + MagickTrapCrush = 357, + EnduringLevitation = 358, + MagickBoltsCrusher = 359, + MagickCrackerSmasher = 360, + CollapsingStrength = 361, + MagickTrapDuration = 362, + MagickCrackerSlayer = 363, + Reduction = 364, + MagickTrapSinger = 365, + MagickCrackerSinger = 366, + PleasantDrift = 367, + SeekerSlayer = 368, + AidArrowChant = 369, + SteadyAdvance = 370, + ForwardKickSlayer = 371, + InvigoratingArrowsDuration = 372, + DemonShield = 373, + SeekerArrowsBlink = 374, + AidArrowBlink = 375, + SalvationalMagick = 376, + FrontKickCrusher = 377, + InvigorationArrowExpand = 378, + CounterEye = 379, + HackSlayer = 380, + InverseSlashCrusher = 381, + Brandish = 382, + DevastateSlayer = 383, + SavageLashEradicate = 384, + AttackCover = 385, + HackCrusher = 386, + InverseSlashExterminator = 387, + GreatGrasp = 388, + DevastateCrusher = 389, + SavageLashCrusher = 390, + ExcessGrudge = 391, + AlchemicStrikeSlayer = 392, + AlchemicEvadeSlayer = 393, + EnduringVision = 394, + AlchemicalRadiusSlayer = 395, + ElixerSlayer = 396, + Stubborn = 397, + AlchemyCrusher = 398, + AlchemicEvadeCrusher = 399, + SkyAnnihilation = 400, + AlchemicalRadiusCrusher = 401, + ElixirCrusher = 402, + DefenseAlchemy = 403, + ThreatenedSpirit = 404, + ExtendedSpirit = 405, + EvasiveShadow = 406, + Extension = 407, + Active = 408, + Avoidance = 409, + ExtendedHealing = 410, + ForagingSpirit = 411, + SproutSealing = 412, + Critical = 413, + EvasiveSpirit = 414, + ForagingHeal = 415, + AttackTouch = 416, + ProtectiveTouch = 417, + PleasantTouch = 418, + GreatEnchantment = 419, + Synergy = 420, + Attribution = 421, + Resistance = 422, + Immovable = 423, + RefreshingRescue = 424, + ReducedCorruption = 425, + InfectedDestroyer = 426, + InfectedSafeguard = 427, + InfectedProficiency = 428, + RushingSpearSlayer = 429, + RisingSpearSlayer = 430, + SweepingSpearSlayer = 431, + CrushingSpearSlayer = 432, + AttackRescue = 433, + EnhancedVitality = 434, + RushingSpearDestroyer = 435, + RisingSpearDestroyer = 436, + SweepingSpearDestroyer = 437, + CrushingSpearDestroyer = 438, + ElementalDefense = 439, + SpiritHoard = 440, + CompanionHealth = 441, + CompanionStamina = 442, + CompanionAttack = 443, + CompanionMagick = 444, + CompanionDefense = 445, + CompanionMagickDefense = 446, + FollowUpAttack = 447, + CompanionHealing = 448, + HeavyStepsLight = 449, + DeftFootingLight = 450, + ExtendedSpringsLight = 451, + GatheringLight = 452, + EfficacyLight = 453, + EffectExtensionLight = 454, + ExpertExcavatorLight = 455, + FlowLight = 456, + TreasureEyeLight = 457, + WillpowerLight = 458, + SafeLandingLight = 459, + EaseBurden = 460, + Myrmidon = 461, + Inquiry = 462, + Purge = 463, + NightEmperor = 464, + MagickalCharge = 466, + ExtendedGlyph = 467, + PerilousAbsorption = 468, + StrongShot = 469, + AugmentedMagick = 470, + AlteredMagick = 471, + IncreasedAbsorption = 472, + FierceFlight = 473, + SoaringSword = 474, + MagickalChant = 475, + ComplementChant = 477, + ProtectiveGlyph = 478, + FortunesofWar = 479, + SourceLuck = 480, + Bombardment = 481, + HeavyFoot = 482, + ActiveSupression = 483, + CourageousSupression = 484, + ImperativeSupression = 485, + VigorousSupression = 486, + AntiReduction = 487, + ArmorCrusher = 488, + WarReadySafeguard = 489, + WarReadyProficiency = 490, + QuadrupleSlashAbsorption = 493, + ArcSlashDestroyer = 494, + SkySlashAbsorption = 495, + FallingSlashAbsorption = 496, + OrdinaryAttack = 497, + RushAttack = 498, + QuadrupleSlashSlayer = 499, + ArcSlashSlayer = 500, + FallingSlashSlayer = 501, + SkySlashSlayer = 502, + FlowAttack = 503, + Respiration = 504, + } +} diff --git a/Arrowgene.Ddon.Shared/Model/CustomSkillId.cs b/Arrowgene.Ddon.Shared/Model/CustomSkillId.cs new file mode 100644 index 000000000..62f4e1c72 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Model/CustomSkillId.cs @@ -0,0 +1,491 @@ +using System.Collections.Generic; + +namespace Arrowgene.Ddon.Shared.Model +{ + public enum CustomSkillId : uint + { + None = 0, + // Fighter + BlinkStrike = 8, + Downthrust = 9, + CymbalAttack = 10, + ShelteredSpike = 11, + TuskToss = 12, + SkywardLash = 13, + CompassSlash = 14, + HindsightSlash = 15, + IntimateStrike = 16, + BravesRaid = 17, + MovingCastle = 18, + FlowingSwordFlash = 19, + PierceSlash = 120, + FlowingShieldSpiral = 121, + TuskTossP = 154, + TuskTossT = 155, + CymbalAttackP = 174, + CymbalAttackT = 175, + DownthrustP = 209, + DownthrustT = 210, + SkywardLashP = 211, + SkywardLashT = 212, + // Seeker + BitingWind = 20, + TossandTrigger = 21, + Ensnare = 22, + SteppingStone = 23, + BackKick = 24, + Reset = 25, + PowderCharge = 26, + Backfire = 27, + EasyKill = 28, + FalconKick = 29, + WhirlwindBlade = 30, + SlidingRope = 31, + ExplosiveFlameBlade = 129, + SoaringHawkSlash = 130, + ExplosiveFlameBladeP = 158, + ExplosiveFlameBladeT = 159, + EasyKillP = 160, + EasyKillT = 161, + SteppingStoneP = 213, + SteppingStoneT = 214, + TossAndTriggerP = 215, + TossAndTriggerT = 216, + // Hunter + ThreefoldArrow = 32, + TriadShot = 33, + FlyingDin = 34, + FullBend = 35, + CloudburstVolley = 36, + PunctureDart = 37, + WhirlingArrow = 38, + CrimsonArrow = 39, + ExplosiveArrowVolley = 40, + StormArrow = 41, + BackwardRetreat = 42, + DemonArrow = 43, + SkyBurstShot = 131, + CombinedPierceShot = 132, + ThreefoldArrowP = 162, + ThreefoldArrowT = 163, + WhirlingArrowP = 164, + WhirlingArrowT = 165, + FullBendP = 197, + FullBendT = 198, + ExplosiveArrowVolleyP = 199, + ExplosiveArrowVolleyT = 200, + // Priest + HealingSpot = 44, + CuringSpot = 45, + SeraphimFlap = 46, + SacredShine = 47, + AttackRiser = 48, + DefenseRiser = 49, + GuardBit = 50, + QuickCharge = 51, + EnergySpot = 52, + HolyGlare = 53, + SoulExplosion = 54, + SolidRiser = 55, + SolaceRiser = 133, + BlastAddition = 134, + SolaceRiserP = 166, + SolaceRiserT = 167, + SeraphimFlapP = 168, + SeraphimFlapT = 169, + CuringSpotT = 217, + CuringSpotP = 218, + DefenseRiserP = 219, + DefenseRiserT = 220, + // Shield Sage + ForceShield = 56, + HolyWall = 57, + SlowLight = 58, + HypnosLight = 59, + RampartRaid = 60, + EarthShake = 61, + ElementGlow = 62, + BindingAnchor = 63, + HandsOfGod = 64, + ElementLight = 65, + StunBurst = 66, + ForceAnchor = 67, + StoneLight = 136, + ProtectionSwing = 135, + EarthShakeP = 170, + EarthShakeT = 171, + ForceShieldP = 172, + ForceShieldT = 173, + RampartRaidP = 205, + RampartRaidT = 206, + HolyWallP = 207, + HolyWallT = 208, + // Sorcerer + Firestorm = 68, + Comestion = 69, + Bolide = 70, + Frigor = 71, + Fulmination = 72, + CrescentBlade = 73, + BlackHaze = 74, + Seism = 75, + Levin = 76, + Gicel = 77, + DarknessMist = 78, + ProminentSphere = 79, + IciclePierce = 137, + LightningStake = 138, + DarknessMistP = 176, + DarknessMistT = 177, + FulminationP = 178, + FulminationT = 179, + ComestionP = 221, + ComestionT = 222, + FrigorP = 223, + FrigorT = 224, + // Warrior + UpwardStrike = 80, + PommelStrike = 81, + SavageLunge = 82, + EscapeSlash = 83, + SparkSlash = 84, + DevilBurst = 85, + Clarity = 86, + HeavenThrust = 87, + AnnihilatorsWindSlash = 88, + GreatWindmill = 89, + DefensiveStance = 90, + FlyingDragonCrash = 91, + GreatGougingFang = 139, + EarthquakeFang = 140, + SavageLungeP = 180, + SavageLungeT = 181, + PommelStrikeP = 182, + PommelStrikeT = 183, + EscapeSlashP = 225, + EscapeSlashT = 226, + SparkSlashP = 227, + SparkSlashT = 228, + // Element Archer + HealingBolt = 92, + CuringBolt = 93, + FlamingBow = 94, + FourfoldBolt = 95, + RicochetSeeker = 96, + MagickalFlare = 97, + EnfeeblingBow = 98, + CripplingBow = 99, + EnergizingBolt = 100, + ExhaustingBow = 101, + WeakeningBow = 102, + GambleDraw = 103, + HealingFlash = 141, + TearingTentacleArrow = 142, + FlamingBowP = 184, + FlamingBowT = 185, + ExhaustingBowP = 186, + ExhaustingBowT = 187, + HealingFlashP = 201, + HealingFlashT = 202, + CripplingBowP = 203, + CripplingBowT = 204, + // Alchemist + AlmaWave = 104, + AlmaPillar = 105, + PileBinder = 106, + AlmaWindust = 107, + RexElementa = 108, + RexCatapulta = 109, + DolusMorsus = 110, + GoldaAurum = 111, + AlchemicalBurst = 112, + DolusAeris = 113, + AlmaSector = 114, + RegalBarrier = 115, + PileBinderP = 189, + PileBinderT = 190, + AlmaPillarP = 191, + AlmaPillarT = 192, + AlmaWaveP = 229, + AlmaWaveT = 230, + RexElementaP = 231, + RexElementaT = 232, + // Spirit Lancer + AuromFang = 143, + AuromSlay =144, + CorrStorm = 145, + CorrSpike = 146, + ScriosBlast = 147, + ScriosGuard = 148, + WallGlasta = 149, + CureGlasta = 150, + CorrMeteor = 153, + EadromCounter = 188, + AuromFangP = 193, + AuromFangT = 194, + WallGlastaP = 195, + WallGlastaT = 196, + CorrSpikeP = 233, + CorrSpikeT = 234, + CureGlastaP = 235, + CureGlastaT = 236, + // High Scepter + FullMoonLight = 237, + WallBarrier = 238, + EclipseBright = 239, + BlackFlashFang = 240, + MirageShift = 241, + TerrorBlast = 242, + PhantomEdge = 243, + DimSlice = 244, + } + + public static class CustomSkillIdMethods + { + public static uint GetCustomSkillRelativeMapping(this CustomSkillId skillId) + { + if (!gRelativeCustomSkillMapping.ContainsKey(skillId)) + { + return 0; + } + return gRelativeCustomSkillMapping[skillId]; + } + + private static readonly Dictionary gRelativeCustomSkillMapping = new Dictionary() + { + // Fighter + [CustomSkillId.BlinkStrike] = 1, + [CustomSkillId.Downthrust] = 2, + [CustomSkillId.CymbalAttack] = 3, + [CustomSkillId.ShelteredSpike] = 4, + [CustomSkillId.TuskToss] = 5, + [CustomSkillId.SkywardLash] = 6, + [CustomSkillId.CompassSlash] = 7, + [CustomSkillId.HindsightSlash] = 8, + [CustomSkillId.IntimateStrike] = 9, + [CustomSkillId.BravesRaid] = 10, + [CustomSkillId.MovingCastle] = 11, + [CustomSkillId.FlowingSwordFlash] = 12, + [CustomSkillId.PierceSlash] = 13, + [CustomSkillId.FlowingShieldSpiral] = 14, + [CustomSkillId.TuskTossP] = 15, + [CustomSkillId.TuskTossT] = 16, + [CustomSkillId.CymbalAttackP] = 17, + [CustomSkillId.CymbalAttackT] = 18, + [CustomSkillId.DownthrustP] = 19, + [CustomSkillId.DownthrustT] = 20, + [CustomSkillId.SkywardLashP] = 21, + [CustomSkillId.SkywardLashT] = 22, + // Seeker + [CustomSkillId.BitingWind] = 1, + [CustomSkillId.TossandTrigger] = 2, + [CustomSkillId.Ensnare] = 3, + [CustomSkillId.SteppingStone] = 4, + [CustomSkillId.BackKick] = 5, + [CustomSkillId.Reset] = 6, + [CustomSkillId.PowderCharge] = 7, + [CustomSkillId.Backfire] = 8, + [CustomSkillId.EasyKill] = 9, + [CustomSkillId.FalconKick] = 10, + [CustomSkillId.WhirlwindBlade] = 11, + [CustomSkillId.SlidingRope] = 12, + [CustomSkillId.ExplosiveFlameBlade] = 13, + [CustomSkillId.SoaringHawkSlash] = 14, + [CustomSkillId.ExplosiveFlameBladeP] = 15, + [CustomSkillId.ExplosiveFlameBladeT] = 16, + [CustomSkillId.EasyKillP] = 17, + [CustomSkillId.EasyKillT] = 18, + [CustomSkillId.SteppingStoneP] = 19, + [CustomSkillId.SteppingStoneT] = 20, + [CustomSkillId.TossAndTriggerP] = 21, + [CustomSkillId.TossAndTriggerT] = 22, + // Hunter + [CustomSkillId.ThreefoldArrow] = 1, + [CustomSkillId.TriadShot] = 2, + [CustomSkillId.FlyingDin] = 3, + [CustomSkillId.FullBend] = 4, + [CustomSkillId.CloudburstVolley] = 5, + [CustomSkillId.PunctureDart] = 6, + [CustomSkillId.WhirlingArrow] = 7, + [CustomSkillId.CrimsonArrow] = 8, + [CustomSkillId.ExplosiveArrowVolley] = 9, + [CustomSkillId.StormArrow] = 10, + [CustomSkillId.BackwardRetreat] = 11, + [CustomSkillId.DemonArrow] = 12, + [CustomSkillId.SkyBurstShot] = 13, + [CustomSkillId.CombinedPierceShot] = 14, + [CustomSkillId.ThreefoldArrowP] = 15, + [CustomSkillId.ThreefoldArrowT] = 16, + [CustomSkillId.WhirlingArrowP] = 17, + [CustomSkillId.WhirlingArrowT] = 18, + [CustomSkillId.FullBendP] = 19, + [CustomSkillId.FullBendT] = 20, + [CustomSkillId.ExplosiveArrowVolleyP] = 21, + [CustomSkillId.ExplosiveArrowVolleyT] = 22, + // Priest + [CustomSkillId.HealingSpot] = 1, + [CustomSkillId.CuringSpot] = 2, + [CustomSkillId.SeraphimFlap] = 3, + [CustomSkillId.SacredShine] = 4, + [CustomSkillId.AttackRiser] = 5, + [CustomSkillId.DefenseRiser] = 6, + [CustomSkillId.GuardBit] = 7, + [CustomSkillId.QuickCharge] = 8, + [CustomSkillId.EnergySpot] = 9, + [CustomSkillId.HolyGlare] = 10, + [CustomSkillId.SoulExplosion] = 11, + [CustomSkillId.SolidRiser] = 12, + [CustomSkillId.SolaceRiser] = 13, + [CustomSkillId.BlastAddition] = 14, + [CustomSkillId.SolaceRiserP] = 15, + [CustomSkillId.SolaceRiserT] = 16, + [CustomSkillId.SeraphimFlapP] = 17, + [CustomSkillId.SeraphimFlapT] = 18, + [CustomSkillId.CuringSpotT] = 19, + [CustomSkillId.CuringSpotP] = 20, + [CustomSkillId.DefenseRiserP] = 21, + [CustomSkillId.DefenseRiserT] = 22, + // Shield Sage + [CustomSkillId.ForceShield] = 1, + [CustomSkillId.HolyWall] = 2, + [CustomSkillId.SlowLight] = 3, + [CustomSkillId.HypnosLight] = 4, + [CustomSkillId.RampartRaid] = 5, + [CustomSkillId.EarthShake] = 6, + [CustomSkillId.ElementGlow] = 7, + [CustomSkillId.BindingAnchor] = 8, + [CustomSkillId.HandsOfGod] = 9, + [CustomSkillId.ElementLight] = 10, + [CustomSkillId.StunBurst] = 11, + [CustomSkillId.ForceAnchor] = 12, + [CustomSkillId.StoneLight] = 13, + [CustomSkillId.ProtectionSwing] = 14, + [CustomSkillId.EarthShakeP] = 15, + [CustomSkillId.EarthShakeT] = 16, + [CustomSkillId.ForceShieldP] = 17, + [CustomSkillId.ForceShieldT] = 18, + [CustomSkillId.RampartRaidP] = 19, + [CustomSkillId.RampartRaidT] = 20, + [CustomSkillId.HolyWallP] = 21, + [CustomSkillId.HolyWallT] = 22, + // Sorcerer + [CustomSkillId.Firestorm] = 1, + [CustomSkillId.Comestion] = 2, + [CustomSkillId.Bolide] = 3, + [CustomSkillId.Frigor] = 4, + [CustomSkillId.Fulmination] = 5, + [CustomSkillId.CrescentBlade] = 6, + [CustomSkillId.BlackHaze] = 7, + [CustomSkillId.Seism] = 8, + [CustomSkillId.Levin] = 9, + [CustomSkillId.Gicel] = 10, + [CustomSkillId.DarknessMist] = 11, + [CustomSkillId.ProminentSphere] = 12, + [CustomSkillId.IciclePierce] = 13, + [CustomSkillId.LightningStake] = 14, + [CustomSkillId.DarknessMistP] = 15, + [CustomSkillId.DarknessMistT] = 16, + [CustomSkillId.FulminationP] = 17, + [CustomSkillId.FulminationT] = 18, + [CustomSkillId.ComestionP] = 19, + [CustomSkillId.ComestionT] = 20, + [CustomSkillId.FrigorP] = 21, + [CustomSkillId.FrigorT] = 22, + // Warrior + [CustomSkillId.UpwardStrike] = 1, + [CustomSkillId.PommelStrike] = 2, + [CustomSkillId.SavageLunge] = 3, + [CustomSkillId.EscapeSlash] = 4, + [CustomSkillId.SparkSlash] = 5, + [CustomSkillId.DevilBurst] = 6, + [CustomSkillId.Clarity] = 7, + [CustomSkillId.HeavenThrust] = 8, + [CustomSkillId.AnnihilatorsWindSlash] = 9, + [CustomSkillId.GreatWindmill] = 10, + [CustomSkillId.DefensiveStance] = 11, + [CustomSkillId.FlyingDragonCrash] = 12, + [CustomSkillId.GreatGougingFang] = 13, + [CustomSkillId.EarthquakeFang] = 14, + [CustomSkillId.SavageLungeP] = 15, + [CustomSkillId.SavageLungeT] = 16, + [CustomSkillId.PommelStrikeP] = 17, + [CustomSkillId.PommelStrikeT] = 18, + [CustomSkillId.EscapeSlashP] = 19, + [CustomSkillId.EscapeSlashT] = 20, + [CustomSkillId.SparkSlashP] = 21, + [CustomSkillId.SparkSlashT] = 22, + // Element Archer + [CustomSkillId.HealingBolt] = 1, + [CustomSkillId.CuringBolt] = 2, + [CustomSkillId.FlamingBow] = 3, + [CustomSkillId.FourfoldBolt] = 4, + [CustomSkillId.RicochetSeeker] = 5, + [CustomSkillId.MagickalFlare] = 6, + [CustomSkillId.EnfeeblingBow] = 7, + [CustomSkillId.CripplingBow] = 8, + [CustomSkillId.EnergizingBolt] = 9, + [CustomSkillId.ExhaustingBow] = 10, + [CustomSkillId.WeakeningBow] = 11, + [CustomSkillId.GambleDraw] = 12, + [CustomSkillId.HealingFlash] = 13, + [CustomSkillId.TearingTentacleArrow] = 14, + [CustomSkillId.FlamingBowP] = 15, + [CustomSkillId.FlamingBowT] = 16, + [CustomSkillId.ExhaustingBowP] = 17, + [CustomSkillId.ExhaustingBowT] = 18, + [CustomSkillId.HealingFlashP] = 19, + [CustomSkillId.HealingFlashT] = 20, + [CustomSkillId.CripplingBowP] = 21, + [CustomSkillId.CripplingBowT] = 22, + // Alchemist + [CustomSkillId.AlmaWave] = 1, + [CustomSkillId.AlmaPillar] = 2, + [CustomSkillId.PileBinder] = 3, + [CustomSkillId.AlmaWindust] = 4, + [CustomSkillId.RexElementa] = 5, + [CustomSkillId.RexCatapulta] = 6, + [CustomSkillId.DolusMorsus] = 7, + [CustomSkillId.GoldaAurum] = 8, + [CustomSkillId.AlchemicalBurst] = 9, + [CustomSkillId.DolusAeris] = 10, + [CustomSkillId.AlmaSector] = 11, + [CustomSkillId.RegalBarrier] = 12, + [CustomSkillId.PileBinderP] = 13, + [CustomSkillId.PileBinderT] = 14, + [CustomSkillId.AlmaPillarP] = 15, + [CustomSkillId.AlmaPillarT] = 16, + [CustomSkillId.AlmaWaveP] = 17, + [CustomSkillId.AlmaWaveT] = 18, + [CustomSkillId.RexElementaP] = 19, + [CustomSkillId.RexElementaT] = 20, + // Spirit Lancer + [CustomSkillId.AuromFang] = 1, + [CustomSkillId.AuromSlay] = 2, + [CustomSkillId.CorrStorm] = 3, + [CustomSkillId.CorrSpike] = 4, + [CustomSkillId.ScriosBlast] = 5, + [CustomSkillId.ScriosGuard] = 6, + [CustomSkillId.WallGlasta] = 7, + [CustomSkillId.CureGlasta] = 8, + [CustomSkillId.CorrMeteor] = 9, + [CustomSkillId.EadromCounter] = 10, + [CustomSkillId.AuromFangP] = 11, + [CustomSkillId.AuromFangT] = 12, + [CustomSkillId.WallGlastaP] = 13, + [CustomSkillId.WallGlastaT] = 14, + [CustomSkillId.CorrSpikeP] = 15, + [CustomSkillId.CorrSpikeT] = 16, + [CustomSkillId.CureGlastaP] = 17, + [CustomSkillId.CureGlastaT] = 18, + // High Scepter + [CustomSkillId.FullMoonLight] = 1, + [CustomSkillId.WallBarrier] = 5, + [CustomSkillId.EclipseBright] = 7, + [CustomSkillId.BlackFlashFang] = 4, + [CustomSkillId.MirageShift] = 2, + [CustomSkillId.TerrorBlast] = 6, + [CustomSkillId.PhantomEdge] = 8, + [CustomSkillId.DimSlice] = 3, + }; + } +} diff --git a/Arrowgene.Ddon.Shared/Model/JobOrbUpgrade.cs b/Arrowgene.Ddon.Shared/Model/JobOrbUpgrade.cs new file mode 100644 index 000000000..3b8208398 --- /dev/null +++ b/Arrowgene.Ddon.Shared/Model/JobOrbUpgrade.cs @@ -0,0 +1,180 @@ +using Arrowgene.Ddon.Shared.Entity.Structure; +using Arrowgene.Ddon.Shared.Model.Quest; +using System.Collections.Generic; + +namespace Arrowgene.Ddon.Shared.Model +{ + public class JobOrbUpgrade + { + public JobOrbUpgrade() + { + QuestDependencies = new List(); + UnlockDependencies = new List(); + } + + public uint ElementId { get; private set; } + public uint Amount { get; private set; } + public OrbGainParamType GainType { get; private set; } + public CustomSkillId CustomSkill { get; private set; } + public AbilityId Augment { get; private set; } + public uint PosX { get; private set; } + public uint PosY { get; private set; } + public uint Cost { get; private set; } + public JobId JobId { get; private set; } + + public List QuestDependencies { get; private set; } + public List UnlockDependencies { get; private set; } + + public bool IsCustomSkill() + { + return GainType == OrbGainParamType.JobCustomSkill; + } + + public bool IsAugment() + { + return GainType == OrbGainParamType.JobAugment; + } + + private uint JobUniqueId(uint elementId, JobId jobId) + { + return elementId | ((uint)jobId << 28); + } + + public JobOrbUpgrade Id(uint elementId, JobId jobId) + { + this.ElementId = JobUniqueId(elementId, jobId); + this.JobId = jobId; + return this; + } + + public JobOrbUpgrade BloodOrbCost(uint amount) + { + this.Cost = amount; + return this; + } + + public JobOrbUpgrade Location(uint x, uint y) + { + this.PosX = x; + this.PosY = y; + return this; + } + + public JobOrbUpgrade Unlocks(OrbGainParamType gainType, uint amount) + { + this.GainType = gainType; + this.Amount = amount; + return this; + } + + public JobOrbUpgrade Unlocks(CustomSkillId customSkill) + { + this.GainType = OrbGainParamType.JobCustomSkill; + this.CustomSkill = customSkill; + return this; + } + + public JobOrbUpgrade Unlocks(AbilityId augment) + { + this.GainType = OrbGainParamType.JobAugment; + this.Augment = augment; + return this; + } + + public JobOrbUpgrade HasUnlockDependency(uint elementId) + { + this.UnlockDependencies.Add(new CDataCommonU32() { Value = JobUniqueId(elementId, JobId) }); + return this; + } + + public JobOrbUpgrade HasUnlockDependencies(List elementIds) + { + foreach (var elementId in elementIds) + { + HasUnlockDependency(elementId); + } + return this; + } + + public JobOrbUpgrade HasUnlockDependencies(params uint[] elementIds) + { + foreach (var elementId in elementIds) + { + HasUnlockDependency(elementId); + } + return this; + } + + public JobOrbUpgrade HasQuestDependency(QuestId questId) + { + return HasQuestDependency((uint)questId); + } + + public JobOrbUpgrade HasQuestDependency(uint questId) + { + this.QuestDependencies.Add(new CDataCommonU32() { Value = questId }); + return this; + } + + public JobOrbUpgrade HasQuestDependencies(List questIds) + { + foreach (var questId in questIds) + { + HasQuestDependency(questId); + } + return this; + } + + public JobOrbUpgrade HasQuestDependencies(List questIds) + { + foreach (var questId in questIds) + { + HasQuestDependency(questId); + } + return this; + } + + public JobOrbUpgrade HasQuestDependencies(params uint[] questIds) + { + foreach (var questId in questIds) + { + HasQuestDependency(questId); + } + return this; + } + + public CDataJobOrbDevoteElement ToCDataJobOrbDevoteElement() + { + var result = new CDataJobOrbDevoteElement() + { + ElementId = this.ElementId, + JobId = this.JobId, + RequireOrb = this.Cost, + OrbParamType = this.GainType, + PosX = this.PosX, + PosY = this.PosY, + IsReleased = false, // TODO: Query from DB + RequiredElementIDList = this.UnlockDependencies, + RequiredQuestList = this.QuestDependencies, + }; + + if (IsCustomSkill()) + { + result.ParamId = this.CustomSkill.GetCustomSkillRelativeMapping(); + result.ParamValue = 0; + } + else if (IsAugment()) + { + result.ParamId = (uint)this.Augment; + result.ParamValue = 0; + } + else + { + result.ParamId = 0; + result.ParamValue = this.Amount; + } + + return result; + } + } +} diff --git a/Arrowgene.Ddon.Shared/Model/OrbGainParamType.cs b/Arrowgene.Ddon.Shared/Model/OrbGainParamType.cs index e44a6f8f5..e0ba9df23 100644 --- a/Arrowgene.Ddon.Shared/Model/OrbGainParamType.cs +++ b/Arrowgene.Ddon.Shared/Model/OrbGainParamType.cs @@ -3,24 +3,35 @@ namespace Arrowgene.Ddon.Shared.Model public enum OrbGainParamType : byte { None = 0x0, - HpMax = 0x1, - StaminaMax = 0x2, - PhysicalAttack = 0x3, - PhysicalDefence = 0x4, - MagicalAttack = 0x5, - MagicalDefence = 0x6, - Rim = 0x7, - Gold = 0x8, - AbilityCost = 0x9, - AccessorySlot = 0xa, - PawnAdventureNum = 0xb, - PawnCraftNum = 0xc, - MainPawnLostRate = 0xd, - MainPawnSlot = 0xe, - SupportPawnSlot = 0xf, - UseItemSlot = 0x10, - MaterialItemSlot = 0x11, - EquipItemSlot = 0x12, - SecretAbility = 0x13, + AllJobsHpMax = 1, + AllJobsStaminaMax = 2, + AllJobsPhysicalAttack = 3, + AllJobsPhysicalDefence = 4, + AllJobsMagicalAttack = 5, + AllJobsMagicalDefence = 6, + Rim = 7, + Gold = 8, + AbilityCost = 9, + AccessorySlot = 10, + PawnAdventureNum = 11, + PawnCraftNum = 12, + MainPawnLostRate = 13, + MainPawnSlot = 14, + SupportPawnSlot = 15, + UseItemSlot = 16, + MaterialItemSlot = 17, + EquipItemSlot = 18, + SecretAbility = 19, + JobHpMax = 20, + JobStaminaMax = 21, + JobPhysicalAttack = 22, + JobPhysicalDefence = 23, + JobMagicalAttack = 24, + JobMagicalDefence = 25, + JobAugment = 26, + JobCustomSkill = 27, + BlessingOfAugments = 28, // TODO: Rename this when figuring out what it does + BlessingOfTheWhiteDragon = 29, + JobItemSlot = 30, } } diff --git a/Arrowgene.Ddon.Shared/Model/SecretAbility.cs b/Arrowgene.Ddon.Shared/Model/SecretAbility.cs deleted file mode 100644 index b7f7c958e..000000000 --- a/Arrowgene.Ddon.Shared/Model/SecretAbility.cs +++ /dev/null @@ -1,101 +0,0 @@ -namespace Arrowgene.Ddon.Shared.Model -{ - public enum SecretAbility : uint - { - None = 0, - TreasureEye = 226, - Willpower = 227, - Gathering = 228, - ExpertExcavator = 229, - Flow = 230, - SoftTouch = 231, - ExtendedSprings = 232, - Featherfoot = 233, - SafeLanding = 234, - Efficacy = 235, - EnhancedThrow = 236, - EffectExtension = 237, - Rakshasa = 238, - Yasha = 239, - NewAttack = 240, - NewDefense = 241, - MoonlightAssault = 242, - MoonlightDefense = 243, - RainAttack = 244, - RainDefense = 245, - Unknown246 = 246, - Unknown247 = 247, - ResistPosion = 248, - AntiSlow = 249, - AntiSleep = 250, - AntiStun = 251, - AntiDrench = 252, - AntiOil = 253, - AntiSeal = 254, - AntiSubdue = 255, - AntiPetrify = 256, - AntiGold = 257, - CloseToFire = 258, - CloseToIce = 259, - CloseToThunder = 260, - CloseToHoly = 261, - CloseToDark = 262, - ControlPoision = 263, - ControlSlow = 264, - ControlSleep = 265, - ControlStun = 266, - QuickDrying = 267, - QuickClean = 268, - QuickSeal = 269, - ReduceSubdue = 270, - ReducePetrify = 271, - ReduceGoldify = 272, - ReduceTar = 273, - ReduceFreeze = 274, - ReduceBlind = 275, - ReduceFire = 276, - ReduceIce = 277, - ReduceThunder = 278, - ReduceHoly = 279, - ReduceDark = 280, - ReducePhysAttackDown = 281, - ReduceDefenseDown = 282, - ReduceMagicAttackDown = 283, - ReduceMagicDefenseDown = 284, - Unknown285 = 285, - Unknown286 = 286, - Unknown287 = 287, - Unknown288 = 288, - Unknown289 = 289, - Unknown290 = 290, - MusicHunter = 291, - MusicMayCry = 292, - MusicFighter = 293, - MusicWily = 294, - MusicGoblins = 295, - CompanionHealth = 441, - CompanionStamina = 442, - CompanionAttack = 443, - CompanionMagick = 444, - CompanionDefense = 445, - CompanionMagickDefense = 446, - FollowupAttack = 447, - CompanionHealing = 448, - HeavyStepsLight = 449, - DeftFootingLight = 450, - ExtendedSpringsLight = 451, - GatheringLight = 452, - EfficacyLight = 453, - EffectExtensionLight = 454, - ExpertExcavatorLight = 455, - FlowLight = 456, - TreasureEyeLight = 457, - WillpowerLight = 458, - SafeLandingLight = 459, - EaseBurden = 460, - Myrmidon = 461, - Inquiry = 462, - Purge = 463, - NightEmperor = 464 - } -} diff --git a/Arrowgene.Ddon.Test/Database/DatabaseMigratorTest.cs b/Arrowgene.Ddon.Test/Database/DatabaseMigratorTest.cs index 89967d5b3..68e3f9862 100644 --- a/Arrowgene.Ddon.Test/Database/DatabaseMigratorTest.cs +++ b/Arrowgene.Ddon.Test/Database/DatabaseMigratorTest.cs @@ -254,7 +254,7 @@ public void Execute(DbConnection conn, string sql) {} public bool InsertPriorityQuest(uint characterCommonId, uint questScheduleId, DbConnection? connectionIn = null) { return true; } public bool InsertQuestProgress(uint characterCommonId, uint questScheduleId, QuestType questType, uint step, DbConnection? connectionIn = null) { return true; } public bool InsertReleasedWarpPoint(uint characterId, ReleasedWarpPoint ReleasedWarpPoint) { return true; } - public bool InsertSecretAbilityUnlock(uint commonId, SecretAbility secretAbility) { return true; } + public bool InsertSecretAbilityUnlock(uint commonId, AbilityId secretAbility) { return true; } public bool InsertShortcut(uint characterId, CDataShortCut shortcut) { return true; } public CraftProgress SelectPawnCraftProgress(uint craftCharacterId, uint craftLeadPawnId) { return new CraftProgress(); } public bool InsertSpSkill(uint pawnId, JobId job, CDataSpSkill spSkill) { return true; } @@ -281,7 +281,7 @@ public void Execute(DbConnection conn, string sql) {} public Account SelectAccountByName(string accountName) { return new Account(); } public List SelectActiveBazaarExhibitionsByItemIdExcludingOwn(uint itemId, uint excludedCharacterId, DbConnection? connectionIn = null) { return new List(); } public List SelectActiveBazaarExhibitionsByItemIdsExcludingOwn(List itemIds, uint excludedCharacterId, DbConnection? connectionIn = null) { return new List(); } - public List SelectAllUnlockedSecretAbilities(uint commonId) { return new List(); } + public List SelectAllUnlockedSecretAbilities(uint commonId) { return new List(); } public BazaarExhibition SelectBazaarExhibitionByBazaarId(ulong bazaarId) { return new BazaarExhibition(); } public List SelectBoxRewardItems(uint commonId, DbConnection? connectionIn = null) { return new List(); } public Character SelectCharacter(uint characterId, DbConnection? connectionIn = null) { return new Character(); }