305 lines
7.4 KiB
C#
305 lines
7.4 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Dalamud.Plugin.Services;
|
|
using Lumina.Excel.Sheets;
|
|
|
|
namespace LLib.GameData;
|
|
|
|
public static class EClassJobExtensions
|
|
{
|
|
public static bool IsClass(this EClassJob classJob)
|
|
{
|
|
bool flag;
|
|
switch (classJob)
|
|
{
|
|
case EClassJob.Gladiator:
|
|
case EClassJob.Pugilist:
|
|
case EClassJob.Marauder:
|
|
case EClassJob.Lancer:
|
|
case EClassJob.Archer:
|
|
case EClassJob.Conjurer:
|
|
case EClassJob.Thaumaturge:
|
|
case EClassJob.Arcanist:
|
|
case EClassJob.Rogue:
|
|
flag = true;
|
|
break;
|
|
default:
|
|
flag = false;
|
|
break;
|
|
}
|
|
if (!flag && !classJob.IsCrafter())
|
|
{
|
|
return classJob.IsGatherer();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool HasBaseClass(this EClassJob classJob)
|
|
{
|
|
return classJob.GetBaseClass().HasValue;
|
|
}
|
|
|
|
public static EClassJob? GetBaseClass(this EClassJob classJob)
|
|
{
|
|
return classJob switch
|
|
{
|
|
EClassJob.Paladin => EClassJob.Gladiator,
|
|
EClassJob.Warrior => EClassJob.Marauder,
|
|
EClassJob.Monk => EClassJob.Pugilist,
|
|
EClassJob.Dragoon => EClassJob.Lancer,
|
|
EClassJob.Ninja => EClassJob.Rogue,
|
|
EClassJob.Bard => EClassJob.Archer,
|
|
EClassJob.WhiteMage => EClassJob.Conjurer,
|
|
EClassJob.BlackMage => EClassJob.Thaumaturge,
|
|
EClassJob.Summoner => EClassJob.Arcanist,
|
|
EClassJob.Scholar => EClassJob.Arcanist,
|
|
_ => null,
|
|
};
|
|
}
|
|
|
|
public static EClassJob AsJob(this EClassJob classJob)
|
|
{
|
|
return 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)
|
|
{
|
|
switch (classJob)
|
|
{
|
|
case EClassJob.Gladiator:
|
|
case EClassJob.Marauder:
|
|
case EClassJob.Paladin:
|
|
case EClassJob.Warrior:
|
|
case EClassJob.DarkKnight:
|
|
case EClassJob.Gunbreaker:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool IsHealer(this EClassJob classJob)
|
|
{
|
|
switch (classJob)
|
|
{
|
|
case EClassJob.Conjurer:
|
|
case EClassJob.WhiteMage:
|
|
case EClassJob.Scholar:
|
|
case EClassJob.Astrologian:
|
|
case EClassJob.Sage:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool IsMelee(this EClassJob classJob)
|
|
{
|
|
switch (classJob)
|
|
{
|
|
case EClassJob.Pugilist:
|
|
case EClassJob.Lancer:
|
|
case EClassJob.Monk:
|
|
case EClassJob.Dragoon:
|
|
case EClassJob.Rogue:
|
|
case EClassJob.Ninja:
|
|
case EClassJob.Samurai:
|
|
case EClassJob.Reaper:
|
|
case EClassJob.Viper:
|
|
case EClassJob.Beastmaster:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool IsPhysicalRanged(this EClassJob classJob)
|
|
{
|
|
switch (classJob)
|
|
{
|
|
case EClassJob.Archer:
|
|
case EClassJob.Bard:
|
|
case EClassJob.Machinist:
|
|
case EClassJob.Dancer:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool IsCaster(this EClassJob classJob)
|
|
{
|
|
switch (classJob)
|
|
{
|
|
case EClassJob.Thaumaturge:
|
|
case EClassJob.BlackMage:
|
|
case EClassJob.Arcanist:
|
|
case EClassJob.Summoner:
|
|
case EClassJob.RedMage:
|
|
case EClassJob.BlueMage:
|
|
case EClassJob.Pictomancer:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool IsDps(this EClassJob classJob)
|
|
{
|
|
if (!classJob.IsMelee() && !classJob.IsPhysicalRanged())
|
|
{
|
|
return classJob.IsCaster();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool DealsPhysicalDamage(this EClassJob classJob)
|
|
{
|
|
if (!classJob.IsTank() && !classJob.IsMelee())
|
|
{
|
|
return classJob.IsPhysicalRanged();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool DealsMagicDamage(this EClassJob classJob)
|
|
{
|
|
if (!classJob.IsHealer())
|
|
{
|
|
return classJob.IsCaster();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static bool IsCrafter(this EClassJob classJob)
|
|
{
|
|
if (classJob >= EClassJob.Carpenter)
|
|
{
|
|
return classJob <= EClassJob.Culinarian;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool IsGatherer(this EClassJob classJob)
|
|
{
|
|
if (classJob >= EClassJob.Miner)
|
|
{
|
|
return classJob <= EClassJob.Fisher;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool IsLimitedJob(this EClassJob classJob)
|
|
{
|
|
if (classJob == EClassJob.BlueMage || classJob == EClassJob.Beastmaster)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static string ToFriendlyString(this EClassJob classJob)
|
|
{
|
|
return classJob switch
|
|
{
|
|
EClassJob.WhiteMage => "White Mage",
|
|
EClassJob.BlackMage => "Black Mage",
|
|
EClassJob.DarkKnight => "Dark Knight",
|
|
EClassJob.RedMage => "Red Mage",
|
|
EClassJob.BlueMage => "Blue Mage",
|
|
_ => classJob.ToString(),
|
|
};
|
|
}
|
|
|
|
public static bool IsInCategory(this EClassJob classJob, ClassJobCategory category)
|
|
{
|
|
return classJob switch
|
|
{
|
|
EClassJob.Adventurer => category.ADV,
|
|
EClassJob.Gladiator => category.GLA,
|
|
EClassJob.Pugilist => category.PGL,
|
|
EClassJob.Marauder => category.MRD,
|
|
EClassJob.Lancer => category.LNC,
|
|
EClassJob.Archer => category.ARC,
|
|
EClassJob.Conjurer => category.CNJ,
|
|
EClassJob.Thaumaturge => category.THM,
|
|
EClassJob.Carpenter => category.CRP,
|
|
EClassJob.Blacksmith => category.BSM,
|
|
EClassJob.Armorer => category.ARM,
|
|
EClassJob.Goldsmith => category.GSM,
|
|
EClassJob.Leatherworker => category.LTW,
|
|
EClassJob.Weaver => category.WVR,
|
|
EClassJob.Alchemist => category.ALC,
|
|
EClassJob.Culinarian => category.CUL,
|
|
EClassJob.Miner => category.MIN,
|
|
EClassJob.Botanist => category.BTN,
|
|
EClassJob.Fisher => category.FSH,
|
|
EClassJob.Paladin => category.PLD,
|
|
EClassJob.Monk => category.MNK,
|
|
EClassJob.Warrior => category.WAR,
|
|
EClassJob.Dragoon => category.DRG,
|
|
EClassJob.Bard => category.BRD,
|
|
EClassJob.WhiteMage => category.WHM,
|
|
EClassJob.BlackMage => category.BLM,
|
|
EClassJob.Arcanist => category.ACN,
|
|
EClassJob.Summoner => category.SMN,
|
|
EClassJob.Scholar => category.SCH,
|
|
EClassJob.Rogue => category.ROG,
|
|
EClassJob.Ninja => category.NIN,
|
|
EClassJob.Machinist => category.MCH,
|
|
EClassJob.DarkKnight => category.DRK,
|
|
EClassJob.Astrologian => category.AST,
|
|
EClassJob.Samurai => category.SAM,
|
|
EClassJob.RedMage => category.RDM,
|
|
EClassJob.BlueMage => category.BLU,
|
|
EClassJob.Gunbreaker => category.GNB,
|
|
EClassJob.Dancer => category.DNC,
|
|
EClassJob.Reaper => category.RPR,
|
|
EClassJob.Sage => category.SGE,
|
|
EClassJob.Viper => category.VPR,
|
|
EClassJob.Pictomancer => category.PCT,
|
|
EClassJob.Beastmaster => category.Unknown0,
|
|
_ => false,
|
|
};
|
|
}
|
|
|
|
public static int GetLevel(this EClassJob classJob, IDataManager dataManager)
|
|
{
|
|
ClassJob? rowOrDefault = dataManager.GetExcelSheet<ClassJob>().GetRowOrDefault((uint)classJob);
|
|
if (!rowOrDefault.HasValue || rowOrDefault.Value.ExpArrayIndex < 0)
|
|
{
|
|
return 0;
|
|
}
|
|
return PlayerStateHelper.GetClassJobLevel(rowOrDefault.Value.ExpArrayIndex);
|
|
}
|
|
|
|
public static int GetExperience(this EClassJob classJob, IDataManager dataManager)
|
|
{
|
|
ClassJob? rowOrDefault = dataManager.GetExcelSheet<ClassJob>().GetRowOrDefault((uint)classJob);
|
|
if (!rowOrDefault.HasValue || rowOrDefault.Value.ExpArrayIndex < 0)
|
|
{
|
|
return 0;
|
|
}
|
|
return PlayerStateHelper.GetClassJobExperience(rowOrDefault.Value.ExpArrayIndex);
|
|
}
|
|
|
|
public static List<Action> GetActions(this EClassJob classJob, IDataManager dataManager)
|
|
{
|
|
return (from a in dataManager.GetExcelSheet<Action>()
|
|
where a.ClassJob.RowId == (uint)classJob && a.ClassJobLevel > 0
|
|
orderby a.ClassJobLevel
|
|
select a).ToList();
|
|
}
|
|
}
|