using System.Collections.Generic; using System.Linq; namespace ACE.Entity.Enum { /// /// note: even though these are unnumbered, order is very important. values of "none" or commented /// as retired or unused --ABSOLUTELY CANNOT-- be removed. Skills that are none, retired, or not /// implemented have been removed from the SkillHelper.ValidSkills hashset below. /// public enum Skill { None, Axe, /* Retired */ Bow, /* Retired */ Crossbow, /* Retired */ Dagger, /* Retired */ Mace, /* Retired */ MeleeDefense, MissileDefense, Sling, /* Retired */ Spear, /* Retired */ Staff, /* Retired */ Sword, /* Retired */ ThrownWeapon, /* Retired */ UnarmedCombat, /* Retired */ ArcaneLore, MagicDefense, ManaConversion, Spellcraft, /* Unimplemented */ ItemTinkering, AssessPerson, Deception, Healing, Jump, Lockpick, Run, Awareness, /* Unimplemented */ ArmsAndArmorRepair, /* Unimplemented */ AssessCreature, WeaponTinkering, ArmorTinkering, MagicItemTinkering, CreatureEnchantment, ItemEnchantment, LifeMagic, WarMagic, Leadership, Loyalty, Fletching, Alchemy, Cooking, Salvaging, TwoHandedCombat, Gearcraft, /* Retired */ VoidMagic, HeavyWeapons, LightWeapons, FinesseWeapons, MissileWeapons, Shield, DualWield, Recklessness, SneakAttack, DirtyFighting, Challenge, /* Unimplemented */ Summoning } public static class SkillExtensions { public static List RetiredMelee = new List() { Skill.Axe, Skill.Dagger, Skill.Mace, Skill.Spear, Skill.Staff, Skill.Sword, Skill.UnarmedCombat }; public static List RetiredMissile = new List() { Skill.Bow, Skill.Crossbow, Skill.Sling, Skill.ThrownWeapon }; public static List RetiredWeapons = RetiredMelee.Concat(RetiredMissile).ToList(); /// /// Will add a space infront of capital letter words in a string /// /// /// string with spaces infront of capital letters public static string ToSentence(this Skill skill) { switch (skill) { case Skill.None: return "None"; case Skill.Axe: return "Axe"; case Skill.Bow: return "Bow"; case Skill.Crossbow: return "Crossbow"; case Skill.Dagger: return "Dagger"; case Skill.Mace: return "Mace"; case Skill.MeleeDefense: return "Melee Defense"; case Skill.MissileDefense: return "Missile Defense"; case Skill.Sling: return "Sling"; case Skill.Spear: return "Spear"; case Skill.Staff: return "Staff"; case Skill.Sword: return "Sword"; case Skill.ThrownWeapon: return "Thrown Weapon"; case Skill.UnarmedCombat: return "Unarmed Combat"; case Skill.ArcaneLore: return "Arcane Lore"; case Skill.MagicDefense: return "Magic Defense"; case Skill.ManaConversion: return "Mana Conversion"; case Skill.Spellcraft: return "Spellcraft"; case Skill.ItemTinkering: return "Item Tinkering"; case Skill.AssessPerson: return "Assess Person"; case Skill.Deception: return "Deception"; case Skill.Healing: return "Healing"; case Skill.Jump: return "Jump"; case Skill.Lockpick: return "Lockpick"; case Skill.Run: return "Run"; case Skill.Awareness: return "Awareness"; case Skill.ArmsAndArmorRepair: return "Arms And Armor Repair"; case Skill.AssessCreature: return "Assess Creature"; case Skill.WeaponTinkering: return "Weapon Tinkering"; case Skill.ArmorTinkering: return "Armor Tinkering"; case Skill.MagicItemTinkering: return "Magic Item Tinkering"; case Skill.CreatureEnchantment: return "Creature Enchantment"; case Skill.ItemEnchantment: return "Item Enchantment"; case Skill.LifeMagic: return "Life Magic"; case Skill.WarMagic: return "War Magic"; case Skill.Leadership: return "Leadership"; case Skill.Loyalty: return "Loyalty"; case Skill.Fletching: return "Fletching"; case Skill.Alchemy: return "Alchemy"; case Skill.Cooking: return "Cooking"; case Skill.Salvaging: return "Salvaging"; case Skill.TwoHandedCombat: return "Two Handed Combat"; case Skill.Gearcraft: return "Gearcraft"; case Skill.VoidMagic: return "Void Magic"; case Skill.HeavyWeapons: return "Heavy Weapons"; case Skill.LightWeapons: return "Light Weapons"; case Skill.FinesseWeapons: return "Finesse Weapons"; case Skill.MissileWeapons: return "Missile Weapons"; case Skill.Shield: return "Shield"; case Skill.DualWield: return "Dual Wield"; case Skill.Recklessness: return "Recklessness"; case Skill.SneakAttack: return "Sneak Attack"; case Skill.DirtyFighting: return "Dirty Fighting"; case Skill.Challenge: return "Challenge"; case Skill.Summoning: return "Summoning"; } // TODO we really should log this as a warning to indicate that we're missing a case up above, and that the inefficient (GC unfriendly) line below will be used return new string(skill.ToString().ToCharArray().SelectMany((c, i) => i > 0 && char.IsUpper(c) ? new char[] { ' ', c } : new char[] { c }).ToArray()); } } public static class SkillHelper { public static HashSet ValidSkills = new HashSet { Skill.MeleeDefense, Skill.MissileDefense, Skill.ArcaneLore, Skill.MagicDefense, Skill.ManaConversion, Skill.ItemTinkering, Skill.AssessPerson, Skill.Deception, Skill.Healing, Skill.Jump, Skill.Lockpick, Skill.Run, Skill.AssessCreature, Skill.WeaponTinkering, Skill.ArmorTinkering, Skill.MagicItemTinkering, Skill.CreatureEnchantment, Skill.ItemEnchantment, Skill.LifeMagic, Skill.WarMagic, Skill.Leadership, Skill.Loyalty, Skill.Fletching, Skill.Alchemy, Skill.Cooking, Skill.Salvaging, Skill.TwoHandedCombat, Skill.VoidMagic, Skill.HeavyWeapons, Skill.LightWeapons, Skill.FinesseWeapons, Skill.MissileWeapons, Skill.Shield, Skill.DualWield, Skill.Recklessness, Skill.SneakAttack, Skill.DirtyFighting, Skill.Summoning }; public static HashSet AttackSkills = new HashSet { Skill.Axe, Skill.Bow, Skill.Crossbow, Skill.Dagger, Skill.Mace, Skill.Sling, Skill.Spear, Skill.Staff, Skill.Sword, Skill.ThrownWeapon, Skill.UnarmedCombat, Skill.FinesseWeapons, Skill.HeavyWeapons, Skill.LightWeapons, Skill.MissileWeapons, Skill.TwoHandedCombat, Skill.WarMagic, Skill.LifeMagic, Skill.VoidMagic, Skill.DualWield, //Skill.Recklessness, // confirmed not in client //Skill.DirtyFighting, //Skill.SneakAttack }; public static HashSet DefenseSkills = new HashSet() { Skill.MeleeDefense, Skill.MissileDefense, Skill.MagicDefense, Skill.Shield // confirmed in client }; } }