From 9db9f95b8cd3f36262b5b4b14f12b7331d3c7279 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 5 Aug 2024 06:48:00 +0200 Subject: [PATCH] Add EClassJob --- GameData/EClassJob.cs | 120 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 GameData/EClassJob.cs diff --git a/GameData/EClassJob.cs b/GameData/EClassJob.cs new file mode 100644 index 0000000..40bd77d --- /dev/null +++ b/GameData/EClassJob.cs @@ -0,0 +1,120 @@ +using System.Diagnostics.CodeAnalysis; + +namespace LLib.GameData; + +[SuppressMessage("Design", "CA1028", Justification = "uint in Lumina")] +public enum EClassJob : uint +{ + Adventurer = 0, + Gladiator = 1, + Pugilist = 2, + Marauder = 3, + Lancer = 4, + Archer = 5, + Conjurer = 6, + Thaumaturge = 7, + Carpenter = 8, + Blacksmith = 9, + Armorer = 10, + Goldsmith = 11, + Leatherworker = 12, + Weaver = 13, + Alchemist = 14, + Culinarian = 15, + Miner = 16, + Botanist = 17, + Fisher = 18, + Paladin = 19, + Monk = 20, + Warrior = 21, + Dragoon = 22, + Bard = 23, + WhiteMage = 24, + BlackMage = 25, + Arcanist = 26, + Summoner = 27, + Scholar = 28, + Rogue = 29, + Ninja = 30, + Machinist = 31, + DarkKnight = 32, + Astrologian = 33, + Samurai = 34, + RedMage = 35, + BlueMage = 36, + Gunbreaker = 37, + Dancer = 38, + Reaper = 39, + Sage = 40, + Viper = 41, + Pictomancer = 42, +} + +public static class EClassJobExtensions +{ + public static EClassJob AsJob(this EClassJob classJob) => classJob switch + { + EClassJob.Gladiator => EClassJob.Paladin, + EClassJob.Marauder => EClassJob.Warrior, + EClassJob.Pugilist => EClassJob.Monk, + EClassJob.Lancer => EClassJob.Dragoon, + EClassJob.Rogue => EClassJob.Ninja, + EClassJob.Archer => EClassJob.Bard, + EClassJob.Conjurer => EClassJob.WhiteMage, + EClassJob.Thaumaturge => EClassJob.BlackMage, + EClassJob.Arcanist => EClassJob.Summoner, + _ => classJob, + }; + + public static bool IsTank(this EClassJob classJob) => + classJob is EClassJob.Gladiator + or EClassJob.Paladin + or EClassJob.Marauder + or EClassJob.Warrior + or EClassJob.DarkKnight + or EClassJob.Gunbreaker; + + public static bool IsHealer(this EClassJob classJob) => + classJob is EClassJob.Conjurer + or EClassJob.WhiteMage + or EClassJob.Scholar + or EClassJob.Astrologian + or EClassJob.Sage; + + public static bool IsMelee(this EClassJob classJob) => + classJob is EClassJob.Pugilist + or EClassJob.Monk + or EClassJob.Lancer + or EClassJob.Dragoon + or EClassJob.Rogue + or EClassJob.Ninja + or EClassJob.Samurai + or EClassJob.Reaper + or EClassJob.Viper; + + public static bool IsPhysicalRanged(this EClassJob classJob) => + classJob is EClassJob.Archer + or EClassJob.Bard + or EClassJob.Machinist + or EClassJob.Dancer; + + public static bool IsCaster(this EClassJob classJob) => + classJob is EClassJob.Thaumaturge + or EClassJob.BlackMage + or EClassJob.Arcanist + or EClassJob.Summoner + or EClassJob.RedMage + or EClassJob.BlueMage + or EClassJob.Pictomancer; + + public static bool DealsPhysicalDamage(this EClassJob classJob) => + classJob.IsTank() || classJob.IsMelee() || classJob.IsPhysicalRanged(); + + public static bool DealsMagicDamage(this EClassJob classJob) => + classJob.IsHealer() || classJob.IsCaster(); + + public static bool IsCrafter(this EClassJob classJob) => + classJob is >= EClassJob.Carpenter and <= EClassJob.Culinarian; + + public static bool IsGatherer(this EClassJob classJob) => classJob is >= EClassJob.Miner and <= EClassJob.Fisher; +}