From 99f87c744b7ab34a59ca41b8eee83f74e919775f Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Mon, 2 Jan 2023 18:22:56 +0100 Subject: [PATCH] THis is the current stuff. --- .../Customization/CustomizationManager.cs | 1 - Glamourer.GameData/GameData.cs | 21 - Glamourer.GameData/ModelData.cs | 111 - Glamourer.GameData/ModelNames.cs | 3254 ----------------- Glamourer.GameData/RestrictedGear.cs | 437 --- Glamourer.GameData/Structs/Stain.cs | 54 - Glamourer/Dalamud.cs | 1 + Glamourer/Glamourer.cs | 5 +- .../Gui/Equipment/EquipmentDrawer.Main.cs | 32 +- .../Gui/Equipment/EquipmentDrawer.Misc.cs | 84 +- Glamourer/Gui/InterfaceInitialization.cs | 1 - 11 files changed, 24 insertions(+), 3977 deletions(-) delete mode 100644 Glamourer.GameData/ModelData.cs delete mode 100644 Glamourer.GameData/ModelNames.cs delete mode 100644 Glamourer.GameData/RestrictedGear.cs delete mode 100644 Glamourer.GameData/Structs/Stain.cs diff --git a/Glamourer.GameData/Customization/CustomizationManager.cs b/Glamourer.GameData/Customization/CustomizationManager.cs index 9f2b0e1..217a996 100644 --- a/Glamourer.GameData/Customization/CustomizationManager.cs +++ b/Glamourer.GameData/Customization/CustomizationManager.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Dalamud; using Dalamud.Data; using Dalamud.Plugin; using Penumbra.GameData.Enums; diff --git a/Glamourer.GameData/GameData.cs b/Glamourer.GameData/GameData.cs index dbf1ba4..61babb1 100644 --- a/Glamourer.GameData/GameData.cs +++ b/Glamourer.GameData/GameData.cs @@ -6,36 +6,15 @@ using Dalamud.Data; using Glamourer.Structs; using Lumina.Excel.GeneratedSheets; using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; using Item = Glamourer.Structs.Item; -using Stain = Glamourer.Structs.Stain; namespace Glamourer; public static class GameData { - private static Dictionary? _stains; private static Dictionary>? _itemsBySlot; private static Dictionary? _jobs; private static Dictionary? _jobGroups; - private static ModelData? _models; - private static RestrictedGear? _restrictedGear; - - public static RestrictedGear RestrictedGear(DataManager dataManager) - => _restrictedGear ??= new RestrictedGear(dataManager); - - public static ModelData Models(DataManager dataManager) - => _models ??= new ModelData(dataManager); - - public static IReadOnlyDictionary Stains(DataManager dataManager) - { - if (_stains != null) - return _stains; - - var sheet = dataManager.GetExcelSheet()!; - _stains = sheet.Where(s => s.Color != 0).ToDictionary(s => (StainId)s.RowId, s => new Stain((byte)s.RowId, s)); - return _stains; - } public static IReadOnlyDictionary> ItemsBySlot(DataManager dataManager) { diff --git a/Glamourer.GameData/ModelData.cs b/Glamourer.GameData/ModelData.cs deleted file mode 100644 index 7d8f9a1..0000000 --- a/Glamourer.GameData/ModelData.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Linq; -using Dalamud.Data; -using Dalamud.Utility; -using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; -using Lumina.Excel.GeneratedSheets; -using OtterGui.Raii; -using Companion = Lumina.Excel.GeneratedSheets.Companion; - -namespace Glamourer; - -public class ModelData -{ - public struct Data - { - public readonly ModelChara Model; - - public string FirstName { get; } - public string AllNames { get; internal set; } - - public Data(ModelChara model, string name) - { - Model = model; - FirstName = $"{name} #{model.RowId:D4}"; - AllNames = $"#{model.RowId:D4}\n{name}"; - } - - public uint Id - => Model.RowId; - } - - private readonly SortedList _models; - private readonly Dictionary _modelByData; - - public IReadOnlyDictionary Models - => _models; - - public unsafe ulong KeyFromCharacterBase(CharacterBase* drawObject) - { - var type = (*(delegate* unmanaged**)drawObject)[50](drawObject); - var unk = (ulong)*((byte*)drawObject + 0x8E8) << 8; - return type switch - { - 1 => type | unk, - 2 => type | unk | ((ulong)*(ushort*)((byte*)drawObject + 0x908) << 16), - 3 => type | unk | ((ulong)*(ushort*)((byte*)drawObject + 0x8F0) << 16) | ((ulong)**(ushort**)((byte*)drawObject + 0x910) << 32) | ((ulong)**(ushort**)((byte*)drawObject + 0x910) << 40), - _ => 0u, - }; - } - - public unsafe bool FromCharacterBase(CharacterBase* drawObject, out Data data) - => _modelByData.TryGetValue(KeyFromCharacterBase(drawObject), out data); - - - public ModelData(DataManager dataManager) - { - var modelSheet = dataManager.GetExcelSheet()!; - - _models = new SortedList(NpcNames.ModelCharas.Count); - - void UpdateData(uint model, string name) - { - name = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name); - if (_models.TryGetValue(model, out var data)) - data.AllNames = $"{data.AllNames}\n{name}"; - else - data = new Data(modelSheet!.GetRow(model)!, name); - _models[model] = data; - } - - var companionSheet = dataManager.GetExcelSheet()!; - foreach (var companion in companionSheet.Where(c => c.Model.Row != 0 && c.Singular.RawData.Length > 0)) - UpdateData(companion.Model.Row, companion.Singular.ToDalamudString().TextValue); - - var mountSheet = dataManager.GetExcelSheet()!; - foreach (var mount in mountSheet.Where(c => c.ModelChara.Row != 0 && c.Singular.RawData.Length > 0)) - UpdateData(mount.ModelChara.Row, mount.Singular.ToDalamudString().TextValue); - - var bNpcNames = dataManager.GetExcelSheet()!; - foreach (var (model, list) in NpcNames.ModelCharas) - { - foreach (var nameId in list) - { - var name = nameId >= 0 - ? bNpcNames.GetRow((uint)nameId)?.Singular.ToDalamudString().TextValue ?? string.Empty - : NpcNames.Names[~nameId]; - if (name.Length == 0) - continue; - - UpdateData(model, name); - } - } - - _modelByData = new Dictionary((int)modelSheet.RowCount); - foreach (var mdl in modelSheet) - { - var unk5 = (ulong)mdl.Unknown5 << 8; - var key = mdl.Type switch - { - 1 => mdl.Type | unk5, - 2 => mdl.Type | unk5 | ((ulong)mdl.Model << 16), - 3 => mdl.Type | unk5 | ((ulong)mdl.Model << 16) | ((ulong)mdl.Base << 32) | ((ulong)mdl.Base << 40), - _ => 0u, - }; - if (key != 0) - _modelByData.TryAdd(key, _models.TryGetValue(mdl.RowId, out var d) ? d : new Data(mdl, string.Empty)); - } - } -} diff --git a/Glamourer.GameData/ModelNames.cs b/Glamourer.GameData/ModelNames.cs deleted file mode 100644 index 382a33f..0000000 --- a/Glamourer.GameData/ModelNames.cs +++ /dev/null @@ -1,3254 +0,0 @@ -using System.Collections.Generic; - -namespace Glamourer; - -// @formatter:off -public static class NpcNames -{ - public static readonly IReadOnlyList Names = new string[] - { - "Raptor", - "Buzzard", - "Hog (lighter)", - "Hog", - "Boar", - "Imp", - "Flytrap", - "Mudestone Golem", - "Tortoise", - "Weevil", - "Squirrel", - "Bat", - "Slug", - "Sea Hare", - "Sand Yarzon", - "Djigga", - "Wisp", - "Myconid", - "Marshmallow (White-eyed)", - "Spriggan (Yellow-eyed/Lightning Rock)", - "Spriggan (Yellow-eyed/Earth Rock)", - "Spriggan (Yellow-eyed/Copper Ore)", - "Spriggan (Yellow-eyed/Mythril Ore)", - "Custard (White-eyed)", - "Kalong", - "Dormouse", - "Peiste", - "Yellowback", - "Ahriman (red)", - "Coblyn", - "Doblyn", - "Crystal Coblyn", - "Drake", - "Aldgoat Billy", - "Aldgoat Nanny", - "Mosshorn", - "Antling Princess", - "Antling Marshal", - "Magitek Vanguard H", - "Magitek Vanguard F", - "Snurble", - "Mole", - "Garuda's Plume", - "Wolf", - "Three-Headed (yellow)", - "Red Cobra", - "Devilet", - "Buffalo", - "Ewe", - "Dodo", - "Puk", - "Rat", - "Marmot", - "Bulb", - "Hornet", - "Qarn Face", - "Aevis", - "Slime", - "Gelato (White-eyed)", - "Flan (White-eyed)", - "Pudding (White-eyed)", - "Bavarois (White-eyed)", - "Wolf Pup", - "Wind Elemental", - "Treant (Greenwrath)", - "Mudestone Golem (spike)", - "Fleshy Pod (Upright)", - "Seed Pod", - "Brown Crate", - "Sandbag", - "Ogre", - "Antling Queen", - "Greater Gargoyle", - "Cyclops", - "Elder Cyclops", - "Mammet (Red Helmet)", - "Razor Plume (Garuda)", - "Satin Plume (Garuda)", - "Karakul Ewe", - "Ewe (bell)", - "Barrel with 3 wine bottles", - "Aenc Thon: Lord of the Lingering Gaze", - "Orb (Blue / Guildhest Water Bubble?)", - "Orb (Purple / Guildhest Water Bubble?)", - "Bubble (ground)", - "Box crate", - "Brown chest", - "Campfire", - "Metal Pot", - "Jar with tied fabric lid", - "Brown Drawer", - "Brown shipping crate with rope on it", - "Giant bird's nest", - "Rock Gaol", - "Flying Ice Dragon", - "Tornado", - "Bertha Cannon", - "Poison Nix", - "Orb (Red / Lightning)", - "Floor Circle (Ice)", - "Spiny Plume (Garuda)", - "Orb (Lightning / White Center)", - "Orb (Watery / Music Symbol)", - "Lightning Elemental", - "Water Elemental", - "Slime (yellow)", - "Slime (purple)", - "Small Void Gate", - "Black Circle", - "Qarn Face (copy)", - "Fancy pillar", - "Karakul Ram", - "Panther", - "Missile Launcher (Castrum)", - "Missile Carrier Claw (Castrum)", - "Ultima Weapon", - "Floor Circle (Twintania's Liquid Hell)", - "ADS (Black/Red)", - "ADS (Black/Purple)", - "ADS (Black/Blue)", - "ADS (Black/Teal)", - "ADS (Black/Green)", - "ADS (Black/Yellow)", - "ADS (Black/Orange)", - "Rook", - "Fallen Neurolink", - "Blue Cobra (Glowing)", - "Red Cobra (Glowing)", - "Gaius van Baelsar - X Slash", - "Dreadknight Bind", - "Floor Circle (Conflagration)", - "Orb (Twintania's Hatch)", - "Orb (Green / Bright Lightning)", - "Spotlight", - "Goblin (Base)", - "Book Glow (Green) (?)", - "FFXIII Odin", - "Bomb (flaming)", - "Rat (2)", - "Box with Maps", - "Crate", - "Amalj'aa Standard w/ Torch", - "ADS (Black/White)", - "Snow-Covered Box", - "Moonfire Faire Bomb Cauldron", - "Purple (Book Glow?)", - "Large Void Gate", - "Spotted Zu Egg", - "White Zu Egg", - "Earthen Brickman (Dragon Quest)", - "Stone Brickman (Dragon Quest)", - "Golden Brickman (Dragon Quest)", - "Elbst", - "Orb (Green / Lighting w/ Purple Outline)", - "Pharos Aether Cloud", - "Rock (Gray)", - "Allagan Death Claw", - "Spriggolem", - "Voidsent Energy Spear", - "Voidsent Energy Scythe", - "Imp (On Fire)", - "Wind", - "Amalj'aa Beacon", - "Sylph Shroom", - "Spear stuck in ground", - "Fancy circular relic", - "Gilgamesh (six weapons)", - "Orb (Yellow / Bubble)", - "Key", - "Orb (Diabolos Nightmare)", - "Wamoura/Silkmoth", - "Imp C (Green)", - "Dark Matter Slug (Honey)", - "Flying Fire Dragon", - "Flying Thunder Dragon", - "Rock (White)", - "Rock (White) (II)", - "Rock (White) (III)", - "N/A", - "Mammet (Black Helmet)", - "Mammet (Blue Helmet)", - "Manticore", - "Spriggan (Yellow-eyed/Motley Egg)", - "Spriggan (Yellow-eyed/Pristine Egg)", - "Spriggan (Yellow-eyed/Chocobo Egg)", - "Spriggan (Yellow-eyed/Midnight Egg)", - "Spriggan (Yellow-eyed/Brilliant Egg)", - "Spriggan (Yellow-eyed/Vibrant Egg)", - "Stopklox Grislyfist / Illuminati Marksman / Goblin Sharpshooter", - "Goblin/Illuminati Glider", - "Magitek Vangob", - "Goblin Bomb", - "Goblin Bomb (Skull)", - "Goblin Bomb (Spiked)", - "Brown crate", - "Gilgamesh (Bradamante)", - "Enkidu (Chicken)", - "Bomb Incubator (Red)", - "Spiked Balls", - "Wind Cylinder", - "Garlic Prince", - "Ninki Nanka (w/ Nankas)", - "Kraken's Tentacle", - "Floor Circle (Water / Hullbreaker)", - "Shield Dragonling", - "Aevis B (White)", - "Ramuh-Egi", - "Leg Trap", - "Brineworm", - "Bubble (Hullbreaker)", - "Adamantoise Dragon", - "Scylla's Staff", - "Orb (Blue / Syrcus Ice)", - "Orb (Red / Syrcus Fire)", - "Orb (Purple / Syrcus Lightning)", - "Okeanis B (Green/Blue)", - "Interceptor Node (PVP)", - "Fire Dragon", - "Hunters Moon Disc (Syrcus)", - "Main Meteor Target", - "Small Meteor Target", - "Field Generator B (Allagan)", - "Aetherochemical Explosion Marker (Syrcus)", - "Ice Gaol", - "Orb (Purple / Aether Lines)", - "Orb (Purple)", - "Orb (Purple / Tam-Tara HM?)", - "Interceptor Drone (PVP)", - "Shiva (weapons)", - "White Gaol", - "Maelstrom Cannon", - "Torama", - "Battle Biast", - "Okeanis A (Blue/Orange)", - "Orb (Green)", - "ADS (Cuboid - Black - Red)", - "ADS (Ovoid - Black - Red)", - "Orb (Phoenix's Blackfire)", - "Orb (Phoenix's Redfire)", - "Floor Fire (Phoenix)", - "Phoenix (Glowing)", - "Bennu (Small)", - "Bennu (Medium)", - "Bennu (Large)", - "Bahamut (Blue)", - "Orb (Blue)", - "The Pain of Meracydia (Neurolinked)", - "The Sin of Meracydia (Neurolinked)", - "Shadowlurker (CAUSES CRASH)", - "Orb (Sandy / Qarn HM?)", - "Spriggan (Blue-eyed: Ice Rock)", - "Snowball?", - "Sabotender Guardia (+ Shield)", - "Sabotender Empiratriz", - "Steinbock Doe", - "Vine (Purple)", - "Typhon's FUNGAH!", - "A Tornado", - "4-tonze Weight", - "Cockatrice (Blue)", - "Vodoriga (Slumbering)", - "Orb (Purple/Blue)", - "Vine", - "Okeanis C (Red/Purple)", - "Atomos Avatar", - "Frumious Koheel Ja (on Wivre)", - "Spear", - "Manxome Molaa Ja", - "Mamool Ja Sacred Standard", - "Wivre", - "Hecteyes (II) (Slightly Lighter Copy)", - "Orb (Blue Static)", - "Orb (White / Five-headed Dragon?)", - "Cloud of Darkness' Dark Storm", - "Midgardsormr (Head)", - "Mandragora (b) (Gardening Copy)", - "Cloud of Darkness - Dark Cloud", - "Enkidu (Primal)", - "Dragon Head (Gilgamesh)", - "Orb (Binding Chains)", - "Snare (Steps of Faith)", - "Exploding Barrels (Steps of Faith)", - "Orb (Lightning)", - "Mirage Dragon (Thunder)", - "Mirage Dragon (Ice)", - "Generator (Keeper of the Lake)", - "Magitek Gunship B (Blue)", - "ADS (Enormous Egg) (Hartching-tide 2015)", - "Everliving Bibliotaph", - "Oliphaunt", - "Fallen Debris (Dusk Vigil)", - "Bit E (Blue & Orange) Clockwork Turret", - "Drum Bit A (Red)", - "Orb (Darkness)", - "Falak (II) (Copy)", - "Dragon Statue (Aery)", - "Brobinyak", - "Orb (Green Cloud)", - "Nidhogg (Hraesvelgr's left eye)", - "Orb (Fire)", - "Circle (Vertical Purple Effect)", - "Ravana (Four Small Swords)", - "Orb (Red/Blue)", - "Clockwork Spider B (Violet Glow)", - "Vanu Totem", - "Sentient Inkhorn 2 (Flightless)", - "Page 64/128/256", - "Mylodon", - "Falcon", - "Zoblyn", - "Orb (Sky Blue)", - "Void Ark Scrap", - "Orb (Bubble)", - "Trappy thing in 73 dgn", - "Magitek Gobwidow", - "Gobtank", - "Gobwalker", - "Lakelord Aenc Thon of the Long Gait", - "Crystals", - "Manipulator", - "Orb (Golden Electricity)", - "Orb (Spinning Discs?)", - "Cone (Spinning Discs?)", - "Gaius van Baelsar X Slash", - "Living Liquid (Anthromorph)", - "Living Liquid (Chiromorph Left)", - "Living Liquid (Chiromorph Right)", - "Investigate", - "Water Tornado (Neverreap? Alexander?)", - "Living Liquid (Vessel)", - "Garuda's Plume (Many Feathers)", - "Yak", - "Tiger", - "Sanguiptere", - "Fire Dragonet", - "Landmine (Pulsing)", - "Flea", - "Orb (White / Five Heade Dragon?)", - "Sword", - "Wind Circle", - "Blue Cobra", - "Vodoriga (II) (Slightly Lighter Copy)", - "Flying Graoully", - "Orb (Blue Fire)", - "Orb (Green Wind)", - "Gobtank G-IV", - "Ice Dragonet", - "Kite", - "Moss Dragonet", - "Steam Bit B (Purple)", - "Amikiri (Shisui of the Violet Tides 1st Boss)", - "Magic Broom 2", - "Poroggo (+ Blue Hat)", - "Dragonkiller Cannon", - "Bit D (Black & Gold)", - "Field Generator A (Allagan)", - "Falak", - "Cloth Scraps?", - "Coeurlregina (Darkened)", - "Proto-Ultima", - "Ravana (Two Large Swords)", - "Glowing Purple Crystal", - "Azys Lla ADS (Spheroid - Silver - Aqua)", - "Bird's Nest / Rosebear", - "Brown drawer", - "Sawbones (Head Vine)", - "Irminsul (Large)", - "Dexter (Mob-Left Frill)", - "Corruption (Vulture)", - "Orb (Gold)", - "Living Rock (II) (Copy)", - "Gyretower", - "Orb (Red/Black)", - "Diabolos (b)", - "Corruption (Sphere)", - "Corruption (Doll)", - "Ghrah Lumiary (Doll)", - "Corruption (Spider)", - "Pharos HM Generator", - "Bomb Incubator (Blue)", - "Irminsul (Small)", - "Sinister (Mob-Right Frill)", - "The Strongman (Heavensturn 2016)", - "Okeanis E (Blue/Red)", - "Green Caterpillar", - "Gana C (Purple/Yellow)", - "Gremlin (red)", - "FFXI Beetle", - "Dragon (Zombie)", - "Ahriman (Purple)", - "Sea Monk (Spiked - Blue)", - "Magic Doll from sky in FFXI", - "Magic Pot from FFXI", - "Sephirot (Phase 2)", - "Tornado with leaves", - "Gobblydegroper (Alexander 8)", - "Groundskeeper C (Purple)", - "Zuro Roggo (Antitower Boss 1)", - "Small Glowing Orb with Music Note in it", - "Boomtype Magitek Gobwalker G-VII (b)", - "Black Cat", - "Floating pink and red hearts", - "Enormous Black Boulder/Ball", - "Blaster (Alexander)", - "Blaster Clone (Alexander)", - "Brawler (Alexander)", - "Spinnning Wheel with spikes in the middle", - "Swindler (Alexander)", - "Vortexer (Alexander)", - "Onslaughter (Alexander)", - "Brute Justice (Final Form)", - "Wind tornado", - "Holder with 3 city-state banners in it", - "Ishgardian Banner", - "Raubahn Sword on the ground", - "Old World Striking Dummy (level 60)", - "Floating ball of ice", - "Dragon's Head (Shinryu Add)", - "Black Pegasus", - "Glowing Orb", - "Ozma Phase One", - "Riviera Striking Dummy", - "Minotaur (Mottled - Red)", - "Large Egg (White)", - "Nidhogg (Both Eyes / No Scars)", - "Nidhogg Phase 3", - "Fancy glowing blue spear/pole", - "Fancy giant red sword buried in the ground", - "Flaming Orb", - "Dangerous Boquet", - "Groundskeeper A", - "Fan Construct", - "Glowing Toxic Neon Green Orb", - "Whelk from FF6 - Purple", - "Whelk from FF6 - Grey", - "Barrel", - "Ozma Phase Two", - "Floating orb of ice", - "Gaol (Ozma)", - "Atomos (Silver)", - "Flame Sergeant Dalvag lookalike without the glowing eyes", - "Bird of Paradise (Rainbow)", - "Callofisteri", - "Living Lock (Vine)", - "Living Lock (Axe)", - "Living Lock (Bulb)", - "Bijou (Calofisteri)", - "Calofisteri Spine [SKL]", - "Sarchosurcus", - "Diremite (Green-Yellow)", - "Spider Mite (Green-Yellow)", - "The Epigraph (Weeping City Mid-Boss)", - "Spider Mite (Yellow-Brown)", - "Kum Kum (Syrcus Tower Amon Adds)", - "Revenant (Red)", - "Revenant (Grey)", - "Blue Mimic", - "Red Mimic", - "Coincounter Primus (Aquapolis Final Boss)", - "Catoblepas C (Yellow w/ Magenta)", - "Liquid Flame (Humanoid Form)", - "Liquid Flame (Hand Form)", - "Liquid Flame (PIllar Form)", - "Pudding (Oil)", - "Poroggo C (Purple w/ Blue Hat)", - "Sophia's Head", - "A silhouette of Sophia", - "Diloc Ciluoc (Xelphatol)", - "Skystone (Xelphatol Diloc Add)", - "Balloon Turret (Xelphatol Diloc Add)", - "A giant tornado", - "Cruise Chaser again", - "Ozma (Shade Form - Adds Sub-boss)", - "Exploding Fat Cannister ( 11 Adds)", - "Tsanahale (Green/Pink)", - "3 Rocks", - "Prime", - "Arrhidaeus' Lanner ( Prime Add)", - "Arrhidaeus' Lanner (Guns - Prime Add)", - "Arrhidaeus' Lanner (Clock - Prime Add)", - "Arrhidaeus' Lanner (Winged - Prime Add)", - "A floating multicolored crystal", - "Floating Glowing White Staff", - "Refurbisher ()", - "Magitek Gobwalker Mk. IX", - "Allagan Drone (Ant)", - "Gaol (Obsidian)", - "Gobroller Mk. VI ( 7)", - "Crystal-Powered Laser Cannon", - "Power Core (Deconstructor Add)", - "Incinerator (Alexander 11)", - "Eradicator ( 11)", - "Voidsent Wyvern (Boss?)", - "Revenant (Purple)", - "Okeanis F (Purple)", - "Golden Lion Mount [Incorrect]", - "Rock Rhino (Mossy)", - "Spriggan (Red-eyed/Lightning Rock)", - "Skatene B (White)", - "Sea Monk (Psychadelic)", - "Goobbue (Frozen)", - "Shadow Dragon (Purple/Green)", - "Generic Blue Demon thing", - "Diabolos (Scathach)", - "Scary Floating Demon", - "Bulbasaur? (Skalla Boss)", - "Gowrow (Sohm Al HM 2nd Boss)", - "Rock Plant Fish Mouth???", - "Magma Snipper", - "Atomos (Chrome Blue)", - "Atomos (Yellow/Black)", - "Blue Orb (Big)", - "Orange Rotating Rings", - "Imp Jester", - "Zurvan (Fettered)", - "Magitek Predator (w/ Pilot)", - "Piloted Sky Armor", - "Armored Weapon (Magitek Laser Thing)", - "Magitek Killer Mantis", - "The Griffin's Blade", - "Canis Pugnax", - "Scathach Tendril Hand", - "Numbers (Eureka NM)", - "Scathach (Dead)", - "Pegasus (Mount)", - "Unicorn", - "Lion", - "Enraged Marid", - "Shinryu (Huge)", - "Lion (Magma)", - "Byakko (Beast Form - Enraged)", - "Vanara of Biting Cold", - "Vanara of Resonating Thunder", - "Hex Shield Thing", - "Dhara? (Yellow/Brown)", - "Dhara? (Blue/Black) / Gnome", - "Wind Blob?", - "Treant?", - "Ent", - "Rock monster with two hands", - "Antlion", - "Orcus (A-Rank SB Hunt)", - "Grasshopper", - "Simurgh from FFXI / Phorusrhacos", - "Dragonfly (Green/Yellow)", - "Crab Scorpion (Grey)", - "Bear (Black)", - "Shalloweye", - "Griffin (True)", - "Scorpion Bug (Brown)", - "Archamoth", - "Dhammel", - "Coblyn (Pink)", - "Elephant (Grey/Blankets)", - "Mossy Stone Block Demon", - "Dhruva? (Ice)", - "Tatsunoko (Blue/Purple)", - "Apa/Undine", - "Ghost Aurelia (Sirensong Sea)", - "Tenaga (Yanxian Dryad)", - "Doman Treant?", - "Yak Ram Thing", - "Gyuk", - "Monk Chimera", - "Doman Bear? (Orange) Wolverene", - "Phurble (Green)", - "Cobra (Blue)", - "Manta (No Saddle)", - "Wolf (Red/Grey)", - "Steppe Stone Block?", - "Spectre (Blue)", - "Weird flying bug", - "Remora", - "Lammergeyer? (Green)", - "Lammergeyer? (Red)", - "Yol (Pink)", - "Grimekhala (A-Rank SB Hunt)", - "Siege Breaker (Doma Castle)", - "Karakuri Mask?", - "FFXI Shantotto", - "Magitek Rearguard (Doma Castle 1st Boss)", - "Alte Roite (Omega 1)", - "Fire Orb", - "Harakiri Hanya (Kugane Castle)", - "Weirdly colored lion", - "Cerberus (Red - Eureka)", - "Vira Swordmaid (?)", - "Garula (Bardam's Mettle 1st Boss)", - "Bardam's Hammer Golem", - "Purple Gryphon", - "Feather Orb", - "Magna Roader (Purple)", - "Number XXIV (Castrum Abania 2nd Boss)", - "Inferno (Castrum Abania Final Boss)", - "Magitek Heavy Loader (Bomb)", - "Okina (S-Rank Hunt)", - "Magitek... Crawley Thing (Red/Black)", - "Khun Chuluu (Sad Bardam Walls)", - "Void Ark Plant Beast?", - "Gowrow (Sohl Al HM)", - "Living Liquid (Alex)", - "Erle (A-Rank SB Hunt)", - "Vochtstein (A-Rank SB Hunt)", - "Lugat (Sirensong Sea 1st Boss)", - "Yumemi (Non-Naked)", - "Sum (A-Rank SB Hunt)", - "Governor (Sirensong Sea 1st Boss)", - "Ugly Blue Scorpion Bug", - "Susanoo", - "Susanoo Sword Part", - "Lorelei (Sirensong Sea Final Boss)", - "Ruby Tide Princess", - "Shisui Yohi (Shisui Final Boss)", - "Water Globe (Purple)", - "Shinryu Tail", - "Red Egg", - "Maned Dragon?", - "Chain Bind (Green) [Effect]", - "Angler Fish (Brown/Orange)", - "Sadu's Door Model [Incorrect]", - "Bahamut (Large-Blue)", - "Coeurl (Grey/Green)", - "Coeurl (Red/Orange)", - "Ivan Coeurlfist", - "Glowing Dragon Skull (Yojimbo Add)", - "Lion (White)", - "Fist Temple Golem?", - "Spirit Coeurl", - "Susanoo Blocking Shield Effect", - "Armored Weapon (Magitek Laser Spider)", - "Targeting mark on ground", - "Zenos Sword (Wind)", - "Zenos Sword (Lightning)", - "Zenos Sword (Force?)", - "Magitek Avenger", - "Magna Roader (Red)", - "Magitek Bit Bomb (Rearguard Add)", - "Razor Disc (Doma Boss Add)", - "Garlean Gatling Gun", - "Stone Gaol (Susanoo)", - "Floating Blue Light", - "Rock Beast (Purple Crystals)", - "Ancient Wyvern (Spined - Black/Purple)", - "Blue Egg", - "Catastrophe Tentacle", - "Sun Orb", - "Electric Orb", - "Shining Orb", - "Scarab (Tan)", - "Training Dummy (Elite)", - "Demon Tome (Blank)", - "Water Orb", - "Dragon (Yellow)", - "Nine-Tails (FATE Boss)", - "Fox kit", - "Demon Face Totem (Omega 4)", - "Tentacle (Exdeath Add)", - "Black Hole [Effect]", - "Neo Exdeath", - "Namazu (Big)", - "Salt and Light (S-Rank SB Hunt)", - "Hoarhound (Fenrir - Purple/Red)", - "Horse (Namazu Quest Mount)", - "Diamond Carbuncle", - "Midgardsormr pet size", - "Level Checker (Red)", - "Level Checker (Green)", - "Treasure Chest (Copper)", - "Ram (bell)", - "X Slash [Effect]", - "Wood Table", - "Basket of Fish", - "Dummy", - "Hashmal: Bringer of Order (Rabanastre 2nd Boss)", - "Rolling Boulder", - "Floating Purple Dragon Head", - "Argath Thadalfus (Rabanastre Final Boss)", - "Floating Sword", - "Mateus: the Corrupt (Rabanastre 1st Boss)", - "Ice-Skating Goddess (Mateus Add)", - "Floating Water Bubble", - "Block of ice", - "Kelpie (Skalla 1st Boss)", - "The Old One (Skalla 2nd Boss)", - "Rofocale (Rabanastre 3rd Boss)", - "Sea Faerie? (Skall Add)", - "Sea Faerie? (Skalla Trash)", - "Archaeodemon (Rabanastre Trash)", - "Bangaa Guy", - "Bangaa Guy - red", - "Bangaa Guy - grey", - "Weird Multicolored Sphere", - "Flying Dragon", - "Flying Dragon - White", - "Flying Dragon - Green-ish", - "Squib (Eureka)", - "Lamashtu (Eureka NM)", - "Mirrorknight (Corrupted - Green/Purple)", - "Bombadeel (Eureka NM)", - "Treant (Christmas Event)", - "Pazuzu (Eureka Anemos NM)", - "Ice Elemental", - "Pulsating blue ground field", - "Otake-Maru (Hell's Lid 1st Boss)", - "Kamaitachi (Hell's Lid 2nd Boss)", - "Flaming Wall monster from Hell's Lid", - "White Whittret", - "The Ultima Warrior (Fractal Cont. HM 1st Boss)", - "Motherbit (Fractal Cont. HM 1st Boss)", - "Allagan Bit (Motherbit Add)", - "The Ultima Beast (Fractal Cont. HM Final Boss)", - "Guardian (Omega 7)", - "Airforce (Omega 7 Add)", - "Floating Glowing Missile", - "Dadaluma (Omega 7 Add)", - "Glowing: Pulsating Green Sphere of Epilepsy", - "Allagan Prototype Chimera (Fractal HM)", - "Allagan Prototype Minotaur (Fractal HM)", - "Eyeball Slime (Radioactive)", - "Primelephas (Eureka)", - "A Tornado (literally)", - "Cat form Byakko", - "Orb (Byakko's Balls)", - "Crab from Hells Lid", - "Goddess Chadarnook (Omega 6 Add)", - "Chadarnook (Omega 6 Boss)", - "Floating Gold Needle", - "Rathalos (Monster Hunter)", - "Phantom Train Ghost", - "Phantom Train Markers", - "Regular Kefka", - "God Kefka", - "Kefka Forsaken", - "Sabotender Emperatiz", - "Alpha (Chocobo from Omega)", - "A ball of fire", - "Daidarabotchi (Swallow's Compass 1st Boss)", - "Wukong - Monkey King", - "Gremlin (yellow)", - "Ultima Weapon of some sort", - "Cute monkey", - "Floating gold fan", - "Floating blue cloud of depression", - "Spinning White Orb", - "A giant rock - grey", - "Hiruku (HoH Floor 30 Boss)", - "Yiazmat (Ridorana Final Boss)", - "A huge ring of green mirrors", - "Famfrit: the Darkening Cloud (Ridorana 1st boss)", - "Dark Ewer (Famfrit Add)", - "Math Construct boss from Ridorana", - "Spinning Gear", - "Rusted Math Construct", - "Yukinko (Eureka Pagos)", - "Belias: the Constantly Fucking Going Invincible (Ridorana 2nd Boss)", - "Red Demon Spinning Mask (Heaven-on-High)", - "Blue Demon Spinning Mask (Heaven-on-High)", - "Ridorana Exploding Fire Bell Trash", - "Golem (Gougan)", - "Turtle", - "Weird lion", - "Deformed Mameshiba?", - "Fat Cat", - "Pagos Bunny", - "Creepy Floating Head with Scythes for arms and another head on top", - "Ash Dragon (Pagos)", - "Golden King Crab", - "Chakram - The Burn", - "Dreadnaught", - "King Igloo (Eureka Pagos NM)", - "Eureka Pagos NM Marlboro Stack", - "Matmata", - "Louhi (Eureka Pagos NM)", - "Bangaa Boss Guy", - "Hedetet - Pillar", - "Brown Slime", - "Frost Dragon", - "Omega - Chaos", - "Suzaku Orb", - "Omega - Midgardsormr", - "Midgardsormr Head (Omega)", - "Pillar", - "Suzaku - Dressed", - "Phenoix Add", - "Suzaku - Feather", - "Blue Orb", - "Red Orb", - "Suzaku - Human", - "Suzaku Indicator (Red)", - "Suzaku Indicator (Yellow)", - "Suzaku Indicator (Blue)", - "Suzaku Indicator (Purple)", - "Suzaku Indicator (North)", - "Suzaku Indicator (East)", - "Suzaku Indicator (South)", - "Suzaku Indicator (West)", - "Omega Rocket Punch 1", - "Omega Rocket Punch 2", - "Omega Level Checker", - "Omega M", - "Omega M | F Puddle", - "Neo Omega", - "Omega- Floating Left Arm", - "Omega- Floating Right Arm", - "Omega 12 Structure?", - "Mister Bright-Eyes", - "Endymion B (Rainbow)", - "Eden's Orb", - "Floating Axe", - "Marshmallow (Black-eyed)", - "Hidden Gorge Machine", - "Magitek Trooper FFXV", - "MA-X FFXV", - "Iseultalon FFXV", - "Floating Staff", - "Eggplant", - "Slime (Gold)", - "Suzaku Effect", - "Fire Elemental", - "Garuda XV Event", - "Christmas Slime", - "Ultima", - "Omega 11s Hands", - "Blood Angel (Ultima add)", - "Annia Quo Soranus and Julia Quo Soranus (Ghimlyt) (T-Pose)", - "Mustadio (Orbonne)", - "Giant Autoturret (Orbonne Add)", - "Rusted Golem", - "The Thunder God (Orbonne-Not Fucked Up)", - "Ephemeral Warrior", - "Harpy (Orbonne)", - "Absolute Virtue Dragon Add", - "Armor Boi (Ghimlyt)", - "Wall of Snakes (Seiryu)", - "Ultima: The High Seraph (Orbonne)", - "T.G. Sword", - "Famfrit (Ultima)", - "Belias (Ultima)", - "Hashmal (Ultima)", - "Grand Cross Crystal", - "Art's Spear", - "Owain's Spear", - "Owain's Hand", - "Storge - Malikah's Well 3rd boss", - "Feather", - "Spikey", - "Trisiltia", - "Tusk", - "White Chicken", - "Sin Eater", - "Tesleen (Sin Eater)", - "Phillia (Holmister final boss)", - "FFXII Sleipnir", - "Ice Bomber", - "Therion - Flying", - "Cladoselcahe", - "Eros (Ravel Final Boss)", - "Terminus Bellweather", - "Flying Head", - "Froggo", - "Glowy Orb", - "Armored Beast (Red)", - "Daen (??)", - "Titania's Add", - "Fist in Titana", - "Add in Twinning?", - "Electral Orb", - "Jar?", - "Greatwoods Golem", - "A rank in greatwoods?", - "Fate boss in Greatwoods", - "Tempest mob?? Unknown", - "Bunch of Sticks", - "Unsure: Tail-less Pieste (??)", - "Unsure: Stone beast with large bulb (??)", - "Maliktender (A Rank)", - "Tyger (S-Rank Hunt)", - "Chain/Stun/Whatever", - "Talos", - "Goobu", - "Geodude", - "Sin Eater Bird (??)", - "Sin Eater Diremite B (??)", - "Sin Eater Bear (??)", - "Sin Eater Dzo (??)", - "Spiked Monk Chimera", - "Engedered Pteraketos", - "Fire Bomber", - "Quetzalcoatl - Akadaemia", - "Serpent", - "Sin Eater Demon wall", - "Vauthry", - "Sticks Sticks but ice", - "Floating Swords (Innocence)", - "Boulder in MSQ", - "Eden's Voidwalker's Adds", - "Eden's Voidwalker's hand add stuff", - "Sin Eater Cocoon", - "Sin Eater Diremite (??)", - "Hades: first form", - "Hades (2nd form)", - "Dark Orb", - "Ran'jit with scythe", - "Ran'jit pet", - "Shinryu head?", - "Eden's Leviathan", - "Eden's Titan", - "A rock", - "Eden's Titan Rocks", - "Eden's Titan 2nd Form", - "Ran'jit - Frozen", - "Owl in chair (Name needed)", - "Golden Fuath (??)", - "ShB S-rank goobue", - "Pegasus", - "Dark Pegasus", - "Zu lookalike monster (Name needed)", - "Glider (Blue)", - "Sticks are alive!?", - "Golden Construct", - "S-rank SHB", - "Box", - "Smaller Box", - "Sin Eater cacoon", - "Leannan Sith (Cosmos 2nd Boss)", - "Leannan Sith Seed", - "Nier Reverse-Jointed Goliath", - "Nier Add 2", - "Goliath Tank ?? (Nier Raid)", - "Seeker of Solitutde (Cosmos 1st Boss)", - "Ludus (Cosmos Final Boss)", - "Magicked Broom sweeping", - "Hades Extreme (???)", - "Red orb (???)", - "Blue square (???)", - "Hobbes (Copied Factory 2nd Boss)", - "Hobbes Armature", - "Hobbes Armature 2", - "Perfect (Golden)", - "Serial-jointed Command Model (Copied Factory 1st Boss)", - "Nier Add 3", - "Nier Orbs", - "9S-operated Walking Fortress (Copied Factory Final Boss)", - "9S in Flier", - "Nier Goliath Tank", - "Marx Support", - "Nier Add", - "Nier Add 4", - "Nier Add 5", - "Nier Add 6", - "Nier Flier no pilot", - "Nier Missiles", - "Prime (TEA version)", - "Perfect Alexander (Coloured)", - "Destrudo (Pixie Quest Boss)", - "Mochi Minotaur", - "2P in Flier", - "Unknown (Anamensis 1st Boss)", - "Ruby Weapon", - "Ruby Weapon - Nael van Darnus phase", - "Ruby Weapon Add (???)", - "Nael Heads(Red)", - "Nael Heads(Blue)", - "Kyklops (Anamensis 2nd Boss)", - "Kukshs Dheem (Anamensis Final Boss)", - "Kukshs Dheem Add", - "Ramuh, Heritor of Levin", - "Eden Ramuh Black", - "Eden Ramuh Horse Add", - "Glowing Evil Bird", - "Garuda, Heritor of the Vortex", - "Eden Ifrit", - "Eden Raktapaksa", - "Garuda's Feathers", - "Ifirit Orb", - "Trench Amemone", - "Flying Hairy Eyeball", - "Lo ousia", - "Eden Idol of Darkness", - "Eden Bird Adds", - "Eden Verse Idol of Darkness", - "Orb", - "Eden Verse Idol of Darkness Birds", - "Eden 7 Birds", - "BLU Blue X", - "BLU Red X", - "BLU Green X", - "Stack of blue cubes", - "Ruby Weapon Orbs", - "Void Octopus thing", - "Eden Verse Shiva", - "Aqua Orb", - "Earthen Golem", - "Feo Ul King Titania", - "Eden Idol of Darkness Birds", - "Sppoky demon Bird", - "Monoceros (Bozja)", - "Zombie Behemoth", - "Elidibus (Warrior of Light)", - "Elddragon (Red Bahamut)", - "Sapphire Weapon", - "Alebrije monster thing", - "724P-operated Superior Flight Unit", - "Bozja Walking Cannon", - "Sand Mandagora ??", - "Cerberus (Delibrum Reginae)", - "Pod (Nier raid)", - "Construct X (used various places)", - "Ball of feathers", - "Zul", - "4C6F6E67696E67: The Compound", - "Compound 2P (Black)", - "Broken Pod", - "Brionac (Castrum Lacus Litore)", - "Shiny Orb", - "Red Orb of ouch", - "Nidstinien", - "Pile of Androids", - "Android", - "Mud Ball (Matoya's Relict)", - "Mudman (Matoya's Relict)", - "Golden Beaver", - "Emerald Weapon (with Manipulators, Green)", - "Emerald Weapon Right Claw", - "Magitek Mine (Emerald Weapon)", - "Emerald Weapon Left Claw", - "Emerald Weapon add (gold)", - "Coat of Arms (Blue)", - "Coat of Arms (Yellow)", - "(Matoya's Relict)", - "Cloud of Darkness (Eden)", - "Cloud of Darknes (Eden, Clone)", - "Shadowkeeper (Standing)", - "Shadowkeeper (standing shadow clone)", - "Shadowkeeper (shadow clone)", - "Shadowkeeper Shadow", - "Umbral Orb (Trio)", - "Gukumatz (Fatebreaker)", - "Thunder Ring (Turn of the Heavens)", - "Fire Mirror (Sundered Sky)", - "Thunder Mirror (Sundered Sky)", - "Eden's Promise (Full size)", - "Green Golem", - "Grey Minotaur", - "Gold Minotaur", - "Aetherial Ward (Delibrum Reginae)", - "Queen's Gunner Turret (Bishop)", - "Queen's Gunner Turret (Rook)", - "Gull", - "Dolphin Calf", - "Hot & Cold Fire 1 Arrow", - "Hot & Cold Fire 2 Arrow", - "Hot & Cold Blizzard 1 Arrow", - "Hot & Cold Blizzard 2 Arrow", - "Hot & Cold Blizzard 2", - "Conflagration Strike", - "Hot & Cold Fire 2", - "Bacon Bits", - "Drone?", - "Trinity Seeker (Katanas)", - "Emerald Weapon (with Manipulators, gold)", - "Emerald Weapon (with Manipulators, green, open)", - "Emerald Weapon (Right Manipulator, gold, sword)", - "Lunar Bahamut Nail", - "Longitudinal Marker (The Tower at Paradigm's Breach)", - "Latitudinal Marker (The Tower at Paradigm's Breach)", - "Xun-Zi / Meng-Zi", - "Ice Sprite (Zadnor)", - "Electric orb (Paglth'an, Amhuluk fight)", - "Directional Orb (The Tower at Paradigm's Breach)", - "Magitek Core (Paglth'an)", - "Diablo Armament", - "Bit C (Red)", - "White Crystal", - "Glowing Shard", - "Alkonost Shadow", - "Spheroid (The Tower at Paradigm's Breach)", - "Energy Orb (The Tower at Paradigm's Breach)", - "Hatchingtide 2021 Chicken", - "Red Girl (Giant)", - "Floating Right Hand (Diamond Weapon)", - "Floating Left Hand (Diamond Weapon)", - "White Lance (Red Girl)", - "Black Lance (Red Girl)", - "Amalj'aa (Physical)", - "Chocobo Carriage", - "Ultima Weapon (no wings/copy)", - "Ultima Weapon (no wings)", - "Ultima Weapon (copy)", - "Moogle", - "Magitek Juggernaut", - "Amalj'aa (Scavenger)", - "Jackal", - "Coeurl Kitten", - "Fibubb Gah", - "Amalj'aa (Brotherhood of Ash)", - "Hamujj Gah", - "Amalj'aa Mender", - "Cavalry Drake", - "Wind-Up Edvya", - "Cherry Bomb", - "Sapphire Carbuncle", - "Maggie", - "Tonberry Scholar", - "Wind-Up Shantotto", - "Ancient Wyvern (- Neurolinks)", - "Garuda's Plume (No Effect)", - "Rubricatus", - "Karakul Ram (bell)", - "White Devil", - "Laurel Goobbue", - "Wamouracampa (II) (Copy)", - "Wamoura (II) (Copy)", - "Gnat", - "Sleipnir", - "Gilgamesh (Unarmed)", - "Cavalry Elbst", - "Mini Mole", - "Kaliya (II) (Copy)", - "Feridad", - "BUGGED - DO NOT CLICK", - "Manacutter (White)", - "Shiva (No Weapons)", - "Captain Madison (Monster)", - "Wayward Hatchling", - "Storm Hatchling", - "Flame Hatchling", - "Black Chocobo Chick", - "Princely Hatchling", - "Heavy Hatchling", - "Ultros (One Lump)", - "Ultros (Two Lumps)", - "Ulros (Three Lumps)", - "Tender Lamb", - "Aithon", - "Xanthos", - "Markab", - "Einbarr", - "Gullfaxi", - "Boreas", - "Kirin", - "Water Imp", - "Dust Bunny", - "Cloud of Darkness (- Clouds)", - "Spriggan (Yellow-eyed w/ Red Egg)", - "Vath", - "Vath storyteller", - "Thunder Dragon (b)", - "Vidofnir (b)", - "Ice Dragonet (b)", - "Moss Dragon (b)", - "Fire Dragon (b)", - "Zombie Dragon (b)", - "Ice Dragon (b)", - "Midgardsormr (Mount)", - "Sanuwa (Mount)", - "Griffin (Mount)", - "Idyllshire Merchant", - "Goblin (Idyllshire)", - "Nidhogg (Hraesvelgr's Left Eye / Fresh Scars)", - "Nidhogg (No Eyes / Fresh Left Scar)", - "Hraesvelgr (One Eye)", - "Azys Lla ADS (Ovoid - Silver - Yellow)", - "Azys Lla ADS (Spheroid - Silver - Yellow)", - "Azys Lla ADS (Cuboid - Silver - Green)", - "Azys Lla ADS (Spheroid - Silver - Violet)", - "Azys Lla ADS (Spheroid - Silver - White)", - "Azys Lla ADS (Ovoid - Silver - White)", - "Azys Lla ADS (Cuboid - Silver - Violet)", - "Azys Lla ADS (Ovoid - Silver - Green)", - "Azys Lla ADS (Spheroid - Silver - Orange)", - "Azys Lla ADS (Cuboid - Silver - Orange)", - "Azys Lla ADS (Cuboid - Silver - White)", - "Azys Lla ADS (Ovoid - Silver - Violet)", - "Azys Lla ADS (Spheroid - Silver - Green)", - "Azys Lla ADS (Ovoid - Silver - Orange)", - "Azys Lla ADS (Cuboid - Silver - Aqua)", - "Azys Lla ADS (Ovoid - Silver - Aqua)", - "Gnath", - "Azys Lla ADS (Spheroid - White - Aqua)", - "Azys Lla ADS (Spheroid - Silver - Red)", - "Ascian Prime (Not Glowing)", - "Gnath Priest", - "Ravana (Glowing Red: Two Large Swords)", - "Shiva (Sword)", - "Flying Thunder Dragon (b)", - "Flying Moss Dragon (b)", - "Flying Ice Dragon (b)", - "Flying Fire Dragon (b)", - "Flying Zombie Dragon (Grounded)", - "Bismarck (Broken Chitin)", - "Manipulator (Four Short Legs)", - "Tonberry Marauder", - "Backrix", - "Azys Lla ADS (Cuboid - Silver - Lavender)", - "Black Coeurl", - "Accompanyment Node", - "Manacutter (Silver)", - "Manacutter (Black)", - "Restrained Sephirot", - "Twintania (Mount)", - "Cactuar Cutting", - "Magic Broom", - "Wind-Up Warrior of Light", - "Floating Eye (b)", - "Trained Sanuwa", - "Chigoe Larva", - "Gaelikitten", - "Animus Elemental", - "Elemental F (White)", - "Azys Lla ADS (Ovoid - White - Lavender)", - "Azys Lla ADS (Spheroid - White - Yellow)", - "Brute Justice (Glowin Final Form)", - "Swindler ()", - "Brawler ()", - "Wyvern (Mount)", - "Calofisteri (Left Haircut)", - "Prime ()", - "Stone Gaol (Titan)", - "Sarcophagus of the Demon Queen: Scathach", - "Tozol Huatotl (Xelphatol)", - "Sophia (second form)", - "Sophia (without head)", - "Sophia's glowing scales", - "Shinryu EX?", - "Diabolos Prime", - "Ancient Wyvern (Deep White)", - "Hraesvalgr (Spirit)", - "Hraesvelgr (One Eye Closed)", - "Glowing Nidhogg Phase 3", - "Nidhogg (Spirit)", - "Dragon (Shadow)", - "Ancient Wyvern (Iridescent Blue)", - "Vath Deftarm", - "Kongamato (Mount)", - "Idyllshire Engineer", - "Dragonet (Blue/White)", - "Idyllshire Augmentor", - "Whisper", - "Jibanyan", - "USApyon", - "Shogunyan", - "Komasan", - "Shaggy Shoat", - "Blizzaria", - "Kyuubi", - "Komajiro", - "Manjimutt", - "Noko", - "Venoct", - "Hovernyan", - "Robonyan F-Type", - "Cloud Mallow", - "Wind-Up Bahamut", - "Moonfire Elbst (2014)", - "Wind-Up Dalamud", - "Little Midgardsormr", - "Wind-Up Louisoix", - "Model Vanguard", - "Mammet 003L", - "Mammet 003G", - "Mammet 003U", - "Cheerleader", - "Christmas Paissa", - "Nutkin", - "Zenos Yae Galvus (Again)", - "Cait Sith (Clean - Redbill Scarf)", - "Lucky Bucket", - "Azys Lla ADS (Ovoid - White - Yellow)", - "Zenos Yae Galvus (Helmet)", - "Gigi", - "Red Baron", - "Anima", - "Zenos Yae Galvus (No Helm)", - "Yol (Purple/Green)", - "Manta Ray (Kojin Quest Mount)", - "White Lanner (Bismarck)", - "Rose Lanner (Ravana)", - "Round Lanner (Thordan)", - "Warring Lanner (Sephirot)", - "Dark Lanner (Niddhog)", - "Wolf (Blue/Red)", - "Wolf (White/Light Red)", - "Adamantoise (Mount)", - "Falcon (Mount)", - "Astrope", - "Witch's Broom", - "Original Fat Chocobo", - "Lanner (Sophia)", - "Firebird", - "Syldra", - "Susanoo Battle Mode", - "Ananta", - "Lanner (Zurvan)", - "Lanner (Brown)", - "Odder Otter", - "Namazu (Blank Eyes)", - "Karakul Ewe (bell)", - "Inferno XL (Castrum Abania Final Boss)", - "Zenos With Helmet", - "Wind-Up Leader (Raubahn)", - "Wind-Up Leader (Merlwyb)", - "Wind-Up Leader (Kan-E-Senna)", - "Gobroller Mk. VII (Alex 10)", - "Hunting Hawk", - "Horse (Brown)", - "Halicarnassus (Omega 3)", - "Golden Bahamut (UCOB)", - "Rival Wings Mech #2 - Red", - "Rival Wings Mech #2 - Blue", - "Rival Wings Mech #1 - Red", - "Rival Wings Mech #1 - Blue", - "Argath Thadalfus? (Rabanastre Final Boss)", - "Lesser Panda", - "Paissa Brat", - "Namazu with headband", - "Zenos Without Helmet", - "Alpha (Omega)", - "Terrified Namazu", - "Tonberry Black Mage", - "Doom Knight Champion", - "Sparrow", - "Morpho", - "Principia (Allagan Summoner Tome)", - "Ladybug", - "Starlight Bear", - "Wind-Up Kojin ( Purple - Minion)", - "Zenos (Recovering)", - "Fox", - "Whittret", - "Bom Boko", - "Mameshiba", - "Marid", - "Tsukuyomi again", - "Baby Opo-opo", - "Nimbus Cloud", - "Ultima Weapon Ultimate", - "Battle Mode Tsukuyomi", - "Namazu", - "Yiazmat (Enraged)", - "Sai Taisui (Swallow's Compass)", - "Gilded Magitek Armor", - "Mikoshi", - "Omega - F (With Weapon)", - "Grani", - "Monkey king", - "Kitten Thing", - "Assassin Fry", - "Another type of Namazu with headband", - "Wise Namazu with headband", - "Another type of Namazu", - "Wise Namazu", - "8 Namazu carrying a platform with nothing on it", - "Wind-Up Bartz", - "Phoenix - Possibly Suzaku", - "Koryu", - "Seiryu (Snake Form)", - "Omega F", - "OMG - Omega", - "Omega - F (No Weapon)", - "Tiny Rat", - "Regalia Type-G (Off)", - "Construct 8 (Refurbished)", - "Legendary Kamuy", - "Auspicious Kamuy", - "Lunar Kamuy", - "Euphonius Kamuy", - "Hallowed Kamuy", - "Ultimate Kamuy/Wolf", - "Azys Lla ADS (Ovoid - White - Aqua)", - "Ironfrog Mover", - "Sand Fox", - "Fae Bismarck", - "Philia - Holminster Switch", - "Sin eater lion", - "Insatiable Flame: Lugus", - "Swearing Imp Thing", - "Nier Walking Fortress no pilot", - "Small Stubby (Nier)", - "Zenos", - "Golem boss that does water stuff", - "Amaro", - "Kuribu Sin Eater", - "The Great Serpent of Ronka", - "Skyslipper", - "Eden Mount!?", - "Arch Ultima no pilot", - "Ruby Weapon (Nael van Darnus only)", - "Ruby Weapon (Shell)", - "Ramuh's Beard", - "Eden Shiva (Naked: Transformation)", - "Eden Shiva (Hydaelyn Form)", - "Sephirot-Egi (no leaves)", - "Rolling Tankard", - "Shoebill", - "Clionid Larva minion", - "Bitty Duckbill", - "Mammet 001", - "Spoony Bard", - "Wind-Up Moogle", - "Festive Namazu", - "Wind-Up Relm", - "Wind-Up Aymeric", - "Wind-up Lyse", - "Wind-Up Hien", - "Primogs", - "Fisherman Otter", - "Page 63", - "Portly Porxie", - "Pod (Nier Raid)", - "Behatted Serpent of Ronka", - "Wind-Up Mystel", - "Sapphire Weapon Gundam", - "Flight Unit Empty", - "Azys Lla ADS (Cuboid - White - Aqua)", - "Ironfrog Ambler", - "Weatherproof Gaelicat", - "The Major-General", - "Emerald Weapon (green, closed)", - "Fae Gwiber", - "Innocent Gwiber", - "Shadow Gwiber", - "Ruby Gwiber", - "Gwiber of Light", - "Emerald Gwiber", - "Diamond Gwiber", - "Landerwaffe", - "Diamond Weapon", - "Al-iklil", - "Sultana Portrait", - "Lord Enma", - "Lord Ananta", - "Zazel", - "Demona", - "Ascian Prime (Mitron/Loghrif)", - "Black Hayate", - "Red Girl (Creepy)", - "Azys Lla ADS (Cuboid - Silver - Yellow)", - "Azys Lla ADS (Ovoid - Silver - Red)", - "Trinity Seeker Clone", - "Much-coveted Mora", - }; - - public static readonly IReadOnlyDictionary ModelCharas = new Dictionary() - { - { 2u, new int[]{ 1487 } }, - { 3u, new int[]{ 258, -1085 } }, - { 6u, new int[]{ 1300, -135, 2660, -189, -190, 2548, 3598, 3599 } }, - { 18u, new int[]{ 1687 } }, - { 20u, new int[]{ 9 } }, - { 21u, new int[]{ 10 } }, - { 22u, new int[]{ 11 } }, - { 23u, new int[]{ 444 } }, - { 24u, new int[]{ -52 } }, - { 25u, new int[]{ -11 } }, - { 26u, new int[]{ -53 } }, - { 27u, new int[]{ -26 } }, - { 28u, new int[]{ 47 } }, - { 29u, new int[]{ -18 } }, - { 31u, new int[]{ 408 } }, - { 32u, new int[]{ 6 } }, - { 34u, new int[]{ 33 } }, - { 35u, new int[]{ 32 } }, - { 36u, new int[]{ 43 } }, - { 37u, new int[]{ -16 } }, - { 38u, new int[]{ -337 } }, - { 39u, new int[]{ -2 } }, - { 40u, new int[]{ 397 } }, - { 41u, new int[]{ 1183 } }, - { 42u, new int[]{ -348 } }, - { 43u, new int[]{ -309 } }, - { 44u, new int[]{ -4 } }, - { 45u, new int[]{ -5 } }, - { 46u, new int[]{ -3 } }, - { 48u, new int[]{ 400 } }, - { 49u, new int[]{ -7 } }, - { 50u, new int[]{ -13 } }, - { 51u, new int[]{ -14 } }, - { 52u, new int[]{ 1479 } }, - { 53u, new int[]{ 7 } }, - { 54u, new int[]{ 8 } }, - { 55u, new int[]{ 2142 } }, - { 56u, new int[]{ -10 } }, - { 57u, new int[]{ 49 } }, - { 58u, new int[]{ 118 } }, - { 59u, new int[]{ 41 } }, - { 60u, new int[]{ 2623 } }, - { 61u, new int[]{ 3 } }, - { 62u, new int[]{ 4 } }, - { 63u, new int[]{ -6 } }, - { 64u, new int[]{ -47 } }, - { 65u, new int[]{ 106 } }, - { 66u, new int[]{ -232 } }, - { 67u, new int[]{ -113 } }, - { 68u, new int[]{ 1462 } }, - { 69u, new int[]{ 28 } }, - { 75u, new int[]{ -15 } }, - { 76u, new int[]{ 197 } }, - { 78u, new int[]{ 129 } }, - { 79u, new int[]{ -17 } }, - { 80u, new int[]{ 46 } }, - { 81u, new int[]{ -8 } }, - { 82u, new int[]{ 1981 } }, - { 83u, new int[]{ 1569 } }, - { 84u, new int[]{ -66 } }, - { 87u, new int[]{ 1461 } }, - { 88u, new int[]{ -158 } }, - { 89u, new int[]{ 35 } }, - { 94u, new int[]{ -9 } }, - { 95u, new int[]{ 34 } }, - { 96u, new int[]{ -1 } }, - { 97u, new int[]{ 120 } }, - { 98u, new int[]{ -12 } }, - { 99u, new int[]{ -25 } }, - { 100u, new int[]{ 316 } }, - { 101u, new int[]{ 270 } }, - { 102u, new int[]{ 1799 } }, - { 103u, new int[]{ -138 } }, - { 104u, new int[]{ 24 } }, - { 105u, new int[]{ -65 } }, - { 106u, new int[]{ 25 } }, - { 107u, new int[]{ -20 } }, - { 108u, new int[]{ -21 } }, - { 109u, new int[]{ -23 } }, - { 110u, new int[]{ -22 } }, - { 111u, new int[]{ -498 } }, - { 115u, new int[]{ -184 } }, - { 116u, new int[]{ -185 } }, - { 117u, new int[]{ -186 } }, - { 118u, new int[]{ -187 } }, - { 119u, new int[]{ -188 } }, - { 120u, new int[]{ -183 } }, - { 126u, new int[]{ 26 } }, - { 127u, new int[]{ 27 } }, - { 128u, new int[]{ -98 } }, - { 130u, new int[]{ -51 } }, - { 131u, new int[]{ 62 } }, - { 133u, new int[]{ 790 } }, - { 134u, new int[]{ 789 } }, - { 135u, new int[]{ 304 } }, - { 136u, new int[]{ -27 } }, - { 137u, new int[]{ 3616 } }, - { 138u, new int[]{ -48 } }, - { 139u, new int[]{ 357 } }, - { 140u, new int[]{ 3504 } }, - { 141u, new int[]{ 287 } }, - { 142u, new int[]{ 286 } }, - { 143u, new int[]{ 2487 } }, - { 145u, new int[]{ 237 } }, - { 146u, new int[]{ 3605 } }, - { 147u, new int[]{ 1532 } }, - { 148u, new int[]{ 7816 } }, - { 149u, new int[]{ 560 } }, - { 150u, new int[]{ 2948 } }, - { 151u, new int[]{ 391 } }, - { 152u, new int[]{ 289 } }, - { 154u, new int[]{ 1281 } }, - { 155u, new int[]{ 1283 } }, - { 156u, new int[]{ 1282 } }, - { 157u, new int[]{ -28 } }, - { 158u, new int[]{ 1465 } }, - { 159u, new int[]{ -44 } }, - { 160u, new int[]{ 399 } }, - { 161u, new int[]{ 1745 } }, - { 162u, new int[]{ 5765 } }, - { 163u, new int[]{ 174 } }, - { 164u, new int[]{ 1205 } }, - { 165u, new int[]{ 655 } }, - { 166u, new int[]{ 4374 } }, - { 167u, new int[]{ 207 } }, - { 168u, new int[]{ 242 } }, - { 169u, new int[]{ 1508 } }, - { 170u, new int[]{ -29 } }, - { 171u, new int[]{ 2583 } }, - { 172u, new int[]{ 242 } }, - { 173u, new int[]{ -50 } }, - { 174u, new int[]{ 3609 } }, - { 175u, new int[]{ -260 } }, - { 176u, new int[]{ -30 } }, - { 177u, new int[]{ -31 } }, - { 178u, new int[]{ -32 } }, - { 179u, new int[]{ -33 } }, - { 180u, new int[]{ 788 } }, - { 181u, new int[]{ 1126 } }, - { 182u, new int[]{ -153 } }, - { 183u, new int[]{ -34 } }, - { 184u, new int[]{ -35 } }, - { 185u, new int[]{ -36 } }, - { 187u, new int[]{ -71 } }, - { 188u, new int[]{ 793 } }, - { 189u, new int[]{ 3031 } }, - { 190u, new int[]{ 341 } }, - { 192u, new int[]{ 292 } }, - { 193u, new int[]{ -37 } }, - { 194u, new int[]{ 294 } }, - { 195u, new int[]{ -38 } }, - { 196u, new int[]{ -72 } }, - { 197u, new int[]{ 1590 } }, - { 198u, new int[]{ 353 } }, - { 199u, new int[]{ 1612 } }, - { 201u, new int[]{ -19 } }, - { 202u, new int[]{ -59 } }, - { 203u, new int[]{ -60 } }, - { 204u, new int[]{ -24 } }, - { 205u, new int[]{ -61 } }, - { 206u, new int[]{ -62 } }, - { 207u, new int[]{ -810 } }, - { 213u, new int[]{ 269 } }, - { 214u, new int[]{ -39 } }, - { 215u, new int[]{ -40 } }, - { 216u, new int[]{ 980 } }, - { 217u, new int[]{ -73 } }, - { 218u, new int[]{ 1396 } }, - { 219u, new int[]{ -74 } }, - { 220u, new int[]{ -75 } }, - { 221u, new int[]{ -76 } }, - { 222u, new int[]{ -181 } }, - { 223u, new int[]{ -180 } }, - { 224u, new int[]{ 656 } }, - { 225u, new int[]{ 3438 } }, - { 226u, new int[]{ 1482 } }, - { 227u, new int[]{ 1872 } }, - { 228u, new int[]{ 4959 } }, - { 229u, new int[]{ 3586 } }, - { 230u, new int[]{ 3617 } }, - { 231u, new int[]{ 3486 } }, - { 232u, new int[]{ 4185 } }, - { 233u, new int[]{ 55 } }, - { 234u, new int[]{ -341 } }, - { 235u, new int[]{ -46 } }, - { 236u, new int[]{ 3789 } }, - { 237u, new int[]{ -94 } }, - { 238u, new int[]{ 290 } }, - { 239u, new int[]{ -209 } }, - { 240u, new int[]{ 1589 } }, - { 241u, new int[]{ 2290 } }, - { 242u, new int[]{ 7685 } }, - { 243u, new int[]{ 1417 } }, - { 244u, new int[]{ 3227 } }, - { 245u, new int[]{ 2161 } }, - { 247u, new int[]{ -45 } }, - { 248u, new int[]{ 3044 } }, - { 249u, new int[]{ 1804 } }, - { 250u, new int[]{ 732 } }, - { 251u, new int[]{ 2821 } }, - { 252u, new int[]{ 4958 } }, - { 256u, new int[]{ 1694 } }, - { 261u, new int[]{ 3046 } }, - { 263u, new int[]{ 712 } }, - { 264u, new int[]{ 404 } }, - { 265u, new int[]{ 236 } }, - { 266u, new int[]{ 272 } }, - { 267u, new int[]{ -41 } }, - { 268u, new int[]{ 307 } }, - { 269u, new int[]{ -573 } }, - { 270u, new int[]{ 308 } }, - { 271u, new int[]{ -819 } }, - { 272u, new int[]{ -104 } }, - { 273u, new int[]{ -105 } }, - { 276u, new int[]{ -702 } }, - { 277u, new int[]{ -64 } }, - { 279u, new int[]{ 563 } }, - { 280u, new int[]{ 360 } }, - { 281u, new int[]{ 1481 } }, - { 282u, new int[]{ -42 } }, - { 283u, new int[]{ 403 } }, - { 284u, new int[]{ -669 } }, - { 286u, new int[]{ -80 } }, - { 287u, new int[]{ -49 } }, - { 289u, new int[]{ -112 } }, - { 291u, new int[]{ -79 } }, - { 292u, new int[]{ -58 } }, - { 293u, new int[]{ -106 } }, - { 294u, new int[]{ -107 } }, - { 295u, new int[]{ 3482 } }, - { 296u, new int[]{ 1467 } }, - { 297u, new int[]{ 107 } }, - { 298u, new int[]{ 1186 } }, - { 301u, new int[]{ 1649 } }, - { 302u, new int[]{ -43 } }, - { 303u, new int[]{ 1644 } }, - { 304u, new int[]{ 1185 } }, - { 305u, new int[]{ 2505 } }, - { 306u, new int[]{ 1801 } }, - { 307u, new int[]{ -116 } }, - { 312u, new int[]{ -229 } }, - { 313u, new int[]{ 3330 } }, - { 315u, new int[]{ -249 } }, - { 316u, new int[]{ -118 } }, - { 317u, new int[]{ -143 } }, - { 318u, new int[]{ -119 } }, - { 319u, new int[]{ -120 } }, - { 320u, new int[]{ -121 } }, - { 321u, new int[]{ -122 } }, - { 322u, new int[]{ -123 } }, - { 323u, new int[]{ -124 } }, - { 324u, new int[]{ 2133 } }, - { 326u, new int[]{ 6052 } }, - { 327u, new int[]{ 7635 } }, - { 328u, new int[]{ 1535 } }, - { 329u, new int[]{ 2904 } }, - { 331u, new int[]{ 2121 } }, - { 332u, new int[]{ -157 } }, - { 333u, new int[]{ 2564 } }, - { 336u, new int[]{ -245 } }, - { 337u, new int[]{ 3204 } }, - { 338u, new int[]{ -299 } }, - { 340u, new int[]{ 8163 } }, - { 341u, new int[]{ 2213 } }, - { 342u, new int[]{ -862 } }, - { 344u, new int[]{ 3051 } }, - { 346u, new int[]{ -504 } }, - { 347u, new int[]{ 2815 } }, - { 350u, new int[]{ 3234 } }, - { 351u, new int[]{ 3231 } }, - { 352u, new int[]{ 3240 } }, - { 353u, new int[]{ -167 } }, - { 354u, new int[]{ 3047 } }, - { 355u, new int[]{ 638 } }, - { 356u, new int[]{ 640 } }, - { 357u, new int[]{ 1480 } }, - { 358u, new int[]{ -54 } }, - { 359u, new int[]{ -55 } }, - { 360u, new int[]{ 639 } }, - { 361u, new int[]{ 1478 } }, - { 362u, new int[]{ 637 } }, - { 363u, new int[]{ 658 } }, - { 364u, new int[]{ 643 } }, - { 365u, new int[]{ 1182 } }, - { 366u, new int[]{ 1570 } }, - { 367u, new int[]{ -56 } }, - { 368u, new int[]{ -110 } }, - { 370u, new int[]{ -110 } }, - { 371u, new int[]{ 2790 } }, - { 372u, new int[]{ 1850 } }, - { 373u, new int[]{ 784 } }, - { 374u, new int[]{ 644 } }, - { 375u, new int[]{ 1464 } }, - { 376u, new int[]{ 1852 } }, - { 377u, new int[]{ -57 } }, - { 378u, new int[]{ 634 } }, - { 379u, new int[]{ 1485 } }, - { 380u, new int[]{ -125 } }, - { 381u, new int[]{ 116 } }, - { 382u, new int[]{ 114 } }, - { 383u, new int[]{ 115 } }, - { 384u, new int[]{ 117 } }, - { 385u, new int[]{ 56 } }, - { 386u, new int[]{ 113 } }, - { 387u, new int[]{ 4340 } }, - { 388u, new int[]{ 4339 } }, - { 389u, new int[]{ -102 } }, - { 390u, new int[]{ -83 } }, - { 391u, new int[]{ -84 } }, - { 392u, new int[]{ -85 } }, - { 393u, new int[]{ -231 } }, - { 395u, new int[]{ 7554 } }, - { 396u, new int[]{ 2572 } }, - { 397u, new int[]{ -387 } }, - { 399u, new int[]{ -739 } }, - { 400u, new int[]{ 2214 } }, - { 401u, new int[]{ 2215 } }, - { 402u, new int[]{ -126 } }, - { 403u, new int[]{ -95 } }, - { 404u, new int[]{ -115 } }, - { 405u, new int[]{ -114 } }, - { 406u, new int[]{ -580 } }, - { 407u, new int[]{ 1398 } }, - { 408u, new int[]{ 1399 } }, - { 409u, new int[]{ 1401 } }, - { 410u, new int[]{ 4149 } }, - { 412u, new int[]{ 1400 } }, - { 413u, new int[]{ -664 } }, - { 414u, new int[]{ 4392 } }, - { 415u, new int[]{ 1402 } }, - { 416u, new int[]{ 1403 } }, - { 417u, new int[]{ 1404 } }, - { 418u, new int[]{ -207 } }, - { 453u, new int[]{ -63 } }, - { 477u, new int[]{ -129 } }, - { 478u, new int[]{ -96 } }, - { 485u, new int[]{ 437 } }, - { 486u, new int[]{ -67 } }, - { 487u, new int[]{ -68 } }, - { 488u, new int[]{ -69 } }, - { 489u, new int[]{ -70 } }, - { 490u, new int[]{ -81 } }, - { 491u, new int[]{ -93 } }, - { 492u, new int[]{ -86 } }, - { 493u, new int[]{ -87 } }, - { 494u, new int[]{ -91 } }, - { 495u, new int[]{ -92 } }, - { 496u, new int[]{ -89 } }, - { 497u, new int[]{ -90 } }, - { 498u, new int[]{ -88 } }, - { 503u, new int[]{ -111 } }, - { 508u, new int[]{ 1474 } }, - { 509u, new int[]{ 1463 } }, - { 511u, new int[]{ -99 } }, - { 512u, new int[]{ -132 } }, - { 513u, new int[]{ -133 } }, - { 514u, new int[]{ -103 } }, - { 516u, new int[]{ -100 } }, - { 517u, new int[]{ -117 } }, - { 518u, new int[]{ -97 } }, - { 519u, new int[]{ -137 } }, - { 521u, new int[]{ 1798 } }, - { 523u, new int[]{ -130 } }, - { 528u, new int[]{ -140 } }, - { 529u, new int[]{ -144 } }, - { 530u, new int[]{ -141 } }, - { 531u, new int[]{ -142 } }, - { 532u, new int[]{ -136 } }, - { 533u, new int[]{ -145 } }, - { 534u, new int[]{ -526 } }, - { 535u, new int[]{ -108 } }, - { 536u, new int[]{ -147 } }, - { 537u, new int[]{ 2148 } }, - { 538u, new int[]{ 1858 } }, - { 539u, new int[]{ -109 } }, - { 541u, new int[]{ -146 } }, - { 550u, new int[]{ -134 } }, - { 551u, new int[]{ -77 } }, - { 552u, new int[]{ -78 } }, - { 557u, new int[]{ -131 } }, - { 558u, new int[]{ 1466 } }, - { 559u, new int[]{ -127 } }, - { 560u, new int[]{ -128 } }, - { 562u, new int[]{ -139 } }, - { 563u, new int[]{ 2598 } }, - { 564u, new int[]{ 2966 } }, - { 565u, new int[]{ -460 } }, - { 566u, new int[]{ 4519 } }, - { 567u, new int[]{ 2838 } }, - { 570u, new int[]{ -234 } }, - { 572u, new int[]{ -264 } }, - { 574u, new int[]{ 2922 } }, - { 575u, new int[]{ -333 } }, - { 576u, new int[]{ -150 } }, - { 589u, new int[]{ -151 } }, - { 590u, new int[]{ -152 } }, - { 591u, new int[]{ -161 } }, - { 595u, new int[]{ 2262 } }, - { 596u, new int[]{ 2263 } }, - { 598u, new int[]{ -148 } }, - { 599u, new int[]{ -149 } }, - { 600u, new int[]{ 2935 } }, - { 601u, new int[]{ 2944 } }, - { 602u, new int[]{ 2000 } }, - { 603u, new int[]{ -182 } }, - { 604u, new int[]{ 2950 } }, - { 606u, new int[]{ 2260 } }, - { 608u, new int[]{ 4553 } }, - { 610u, new int[]{ 2249 } }, - { 611u, new int[]{ -101 } }, - { 612u, new int[]{ 2250 } }, - { 613u, new int[]{ -155 } }, - { 614u, new int[]{ -154 } }, - { 615u, new int[]{ -163 } }, - { 616u, new int[]{ -164 } }, - { 617u, new int[]{ 2329 } }, - { 618u, new int[]{ 2325 } }, - { 619u, new int[]{ -159 } }, - { 620u, new int[]{ -160 } }, - { 628u, new int[]{ 2331 } }, - { 629u, new int[]{ -156 } }, - { 630u, new int[]{ -165 } }, - { 631u, new int[]{ -111 } }, - { 632u, new int[]{ -166 } }, - { 633u, new int[]{ 3824 } }, - { 635u, new int[]{ -162 } }, - { 636u, new int[]{ -196 } }, - { 638u, new int[]{ 1876 } }, - { 640u, new int[]{ 2556 } }, - { 641u, new int[]{ 2547 } }, - { 642u, new int[]{ 2551 } }, - { 645u, new int[]{ 2580 } }, - { 646u, new int[]{ -171 } }, - { 648u, new int[]{ 2566 } }, - { 649u, new int[]{ -170 } }, - { 650u, new int[]{ -169 } }, - { 652u, new int[]{ -197 } }, - { 653u, new int[]{ 2560 } }, - { 654u, new int[]{ 3594 } }, - { 655u, new int[]{ 2609 } }, - { 656u, new int[]{ 2619 } }, - { 657u, new int[]{ 2620 } }, - { 658u, new int[]{ 2611 } }, - { 659u, new int[]{ 3469 } }, - { 660u, new int[]{ -218 } }, - { 661u, new int[]{ 2634 } }, - { 662u, new int[]{ -175 } }, - { 664u, new int[]{ -174 } }, - { 666u, new int[]{ -176 } }, - { 667u, new int[]{ -177 } }, - { 668u, new int[]{ -178 } }, - { 669u, new int[]{ -179 } }, - { 670u, new int[]{ -192 } }, - { 671u, new int[]{ -193 } }, - { 672u, new int[]{ -194 } }, - { 673u, new int[]{ -191 } }, - { 674u, new int[]{ 2597 } }, - { 676u, new int[]{ -168 } }, - { 677u, new int[]{ -195 } }, - { 678u, new int[]{ -198 } }, - { 679u, new int[]{ 2530 } }, - { 681u, new int[]{ -200 } }, - { 690u, new int[]{ 2574 } }, - { 691u, new int[]{ -172 } }, - { 695u, new int[]{ 2640 } }, - { 697u, new int[]{ -199 } }, - { 698u, new int[]{ -173 } }, - { 720u, new int[]{ -496 } }, - { 723u, new int[]{ -208 } }, - { 724u, new int[]{ 3597 } }, - { 725u, new int[]{ 2905 } }, - { 726u, new int[]{ -203 } }, - { 727u, new int[]{ 2890 } }, - { 728u, new int[]{ -202 } }, - { 729u, new int[]{ 2894 } }, - { 730u, new int[]{ 3629 } }, - { 731u, new int[]{ 2778 } }, - { 732u, new int[]{ -211 } }, - { 733u, new int[]{ 267 } }, - { 734u, new int[]{ 2860 } }, - { 735u, new int[]{ 2901 } }, - { 736u, new int[]{ -204 } }, - { 737u, new int[]{ -210 } }, - { 739u, new int[]{ -205 } }, - { 740u, new int[]{ 2895 } }, - { 741u, new int[]{ 3763 } }, - { 757u, new int[]{ 2827 } }, - { 758u, new int[]{ 2828 } }, - { 759u, new int[]{ -201 } }, - { 760u, new int[]{ 2830 } }, - { 761u, new int[]{ 2831 } }, - { 763u, new int[]{ -278 } }, - { 764u, new int[]{ 3045 } }, - { 766u, new int[]{ -228 } }, - { 767u, new int[]{ 792 } }, - { 768u, new int[]{ -212 } }, - { 769u, new int[]{ -220 } }, - { 772u, new int[]{ -216 } }, - { 775u, new int[]{ 3551 } }, - { 776u, new int[]{ 2796 } }, - { 777u, new int[]{ 2789 } }, - { 778u, new int[]{ 2792 } }, - { 779u, new int[]{ -224 } }, - { 780u, new int[]{ -217 } }, - { 781u, new int[]{ 2807 } }, - { 782u, new int[]{ -206 } }, - { 783u, new int[]{ -214 } }, - { 784u, new int[]{ -213 } }, - { 785u, new int[]{ -215 } }, - { 786u, new int[]{ -225 } }, - { 787u, new int[]{ -227 } }, - { 789u, new int[]{ -226 } }, - { 790u, new int[]{ -219 } }, - { 791u, new int[]{ -223 } }, - { 794u, new int[]{ 3511 } }, - { 815u, new int[]{ -222 } }, - { 819u, new int[]{ -221 } }, - { 822u, new int[]{ 3197 } }, - { 824u, new int[]{ 3014 } }, - { 826u, new int[]{ -233 } }, - { 827u, new int[]{ 3494 } }, - { 828u, new int[]{ 3912 } }, - { 829u, new int[]{ -236 } }, - { 830u, new int[]{ -237 } }, - { 831u, new int[]{ 3925 } }, - { 832u, new int[]{ 3574, 3575 } }, - { 833u, new int[]{ 3192 } }, - { 834u, new int[]{ 3608 } }, - { 835u, new int[]{ -230 } }, - { 837u, new int[]{ -268 } }, - { 838u, new int[]{ -266 } }, - { 839u, new int[]{ 3603 } }, - { 840u, new int[]{ 4163 } }, - { 841u, new int[]{ 3471 } }, - { 843u, new int[]{ 3063 } }, - { 844u, new int[]{ 3064 } }, - { 846u, new int[]{ 3193 } }, - { 847u, new int[]{ 3194 } }, - { 848u, new int[]{ -238 } }, - { 849u, new int[]{ -240 } }, - { 850u, new int[]{ -239 } }, - { 851u, new int[]{ -242 } }, - { 852u, new int[]{ -243 } }, - { 853u, new int[]{ -244 } }, - { 854u, new int[]{ -241 } }, - { 855u, new int[]{ 3215 } }, - { 856u, new int[]{ -247 } }, - { 857u, new int[]{ 3217 } }, - { 858u, new int[]{ 3212 } }, - { 859u, new int[]{ -248 } }, - { 860u, new int[]{ 3062 } }, - { 861u, new int[]{ 2999 } }, - { 863u, new int[]{ -255 } }, - { 864u, new int[]{ 3389 } }, - { 865u, new int[]{ -251 } }, - { 867u, new int[]{ -252 } }, - { 870u, new int[]{ 3485 } }, - { 871u, new int[]{ -256 } }, - { 872u, new int[]{ -263 } }, - { 873u, new int[]{ -254 } }, - { 874u, new int[]{ 3074 } }, - { 875u, new int[]{ -253 } }, - { 876u, new int[]{ 3075 } }, - { 877u, new int[]{ 3913 } }, - { 904u, new int[]{ 3922 } }, - { 905u, new int[]{ 3499 } }, - { 906u, new int[]{ -257 } }, - { 907u, new int[]{ -258 } }, - { 908u, new int[]{ -259 } }, - { 909u, new int[]{ 3065 } }, - { 910u, new int[]{ -250 } }, - { 913u, new int[]{ 3565 } }, - { 914u, new int[]{ 3577 } }, - { 915u, new int[]{ 3555 } }, - { 916u, new int[]{ 3541 } }, - { 917u, new int[]{ -275 } }, - { 918u, new int[]{ -307 } }, - { 919u, new int[]{ -384 } }, - { 925u, new int[]{ -289 } }, - { 927u, new int[]{ 3256 } }, - { 928u, new int[]{ -262 } }, - { 930u, new int[]{ 3373 } }, - { 931u, new int[]{ -235 } }, - { 935u, new int[]{ -261 } }, - { 936u, new int[]{ -269 } }, - { 937u, new int[]{ -269 } }, - { 941u, new int[]{ 1858 } }, - { 942u, new int[]{ 3620 } }, - { 943u, new int[]{ 3625 } }, - { 944u, new int[]{ 3481 } }, - { 945u, new int[]{ -357 } }, - { 946u, new int[]{ 3740 } }, - { 947u, new int[]{ -267 } }, - { 948u, new int[]{ -270 } }, - { 949u, new int[]{ 3593 } }, - { 950u, new int[]{ -297 } }, - { 951u, new int[]{ -332 } }, - { 952u, new int[]{ 3624 } }, - { 953u, new int[]{ 3726 } }, - { 954u, new int[]{ 3821 } }, - { 955u, new int[]{ 3526 } }, - { 957u, new int[]{ -308 } }, - { 960u, new int[]{ -246 } }, - { 962u, new int[]{ 3747 } }, - { 963u, new int[]{ -320 } }, - { 968u, new int[]{ 3243 } }, - { 970u, new int[]{ -265 } }, - { 971u, new int[]{ 3252 } }, - { 972u, new int[]{ 3229 } }, - { 974u, new int[]{ 3369 } }, - { 975u, new int[]{ 3649 } }, - { 976u, new int[]{ -302 } }, - { 977u, new int[]{ 3798 } }, - { 979u, new int[]{ -315 } }, - { 980u, new int[]{ -360 } }, - { 982u, new int[]{ 3845 } }, - { 983u, new int[]{ -335 } }, - { 984u, new int[]{ -290 } }, - { 985u, new int[]{ 4453 } }, - { 986u, new int[]{ 3923 } }, - { 994u, new int[]{ -284 } }, - { 995u, new int[]{ -285 } }, - { 996u, new int[]{ 3370 } }, - { 997u, new int[]{ 7862 } }, - { 998u, new int[]{ 7862 } }, - { 999u, new int[]{ -286 } }, - { 1000u, new int[]{ 3251 } }, - { 1001u, new int[]{ -279 } }, - { 1002u, new int[]{ -281 } }, - { 1003u, new int[]{ -282 } }, - { 1005u, new int[]{ 3244 } }, - { 1006u, new int[]{ 4271 } }, - { 1007u, new int[]{ -273 } }, - { 1008u, new int[]{ -272 } }, - { 1009u, new int[]{ -274 } }, - { 1010u, new int[]{ -280 } }, - { 1011u, new int[]{ -317 } }, - { 1012u, new int[]{ 3581 } }, - { 1013u, new int[]{ 3769 } }, - { 1014u, new int[]{ 3770 } }, - { 1015u, new int[]{ -283 } }, - { 1018u, new int[]{ -276 } }, - { 1020u, new int[]{ -275 } }, - { 1021u, new int[]{ -288 } }, - { 1025u, new int[]{ -277 } }, - { 1027u, new int[]{ 3666 } }, - { 1028u, new int[]{ 3667 } }, - { 1030u, new int[]{ -287 } }, - { 1032u, new int[]{ -271 } }, - { 1033u, new int[]{ 4660 } }, - { 1034u, new int[]{ 3542 } }, - { 1035u, new int[]{ 3402 } }, - { 1036u, new int[]{ 3568 } }, - { 1037u, new int[]{ 3392 } }, - { 1038u, new int[]{ 3495 } }, - { 1039u, new int[]{ -310 } }, - { 1040u, new int[]{ 3614 } }, - { 1041u, new int[]{ 3429 } }, - { 1042u, new int[]{ 3628 } }, - { 1043u, new int[]{ -807 } }, - { 1044u, new int[]{ 3556 } }, - { 1045u, new int[]{ 3613 } }, - { 1046u, new int[]{ 3506 } }, - { 1047u, new int[]{ 3823 } }, - { 1051u, new int[]{ 10099 } }, - { 1052u, new int[]{ 3615 } }, - { 1053u, new int[]{ 3612 } }, - { 1054u, new int[]{ -305 } }, - { 1055u, new int[]{ 3595 } }, - { 1056u, new int[]{ 3611 } }, - { 1057u, new int[]{ 3764 } }, - { 1058u, new int[]{ 3500 } }, - { 1060u, new int[]{ -330 } }, - { 1061u, new int[]{ -325 } }, - { 1062u, new int[]{ -327 } }, - { 1063u, new int[]{ -326 } }, - { 1064u, new int[]{ 3505 } }, - { 1065u, new int[]{ -525 } }, - { 1070u, new int[]{ -358 } }, - { 1071u, new int[]{ -354 } }, - { 1072u, new int[]{ 3791 } }, - { 1073u, new int[]{ 3579 } }, - { 1074u, new int[]{ -1073 } }, - { 1075u, new int[]{ 3607 } }, - { 1076u, new int[]{ 3835 } }, - { 1078u, new int[]{ 3796 } }, - { 1079u, new int[]{ 3797 } }, - { 1080u, new int[]{ 3846 } }, - { 1081u, new int[]{ -304 } }, - { 1082u, new int[]{ -316 } }, - { 1083u, new int[]{ 3817 } }, - { 1084u, new int[]{ 3748 } }, - { 1087u, new int[]{ -361 } }, - { 1088u, new int[]{ 4452 } }, - { 1089u, new int[]{ 4390 } }, - { 1092u, new int[]{ 3840 } }, - { 1093u, new int[]{ 3418 } }, - { 1094u, new int[]{ 3931 } }, - { 1095u, new int[]{ 3428 } }, - { 1096u, new int[]{ 3661 } }, - { 1097u, new int[]{ 3662 } }, - { 1098u, new int[]{ 3773 } }, - { 1099u, new int[]{ 3421 } }, - { 1105u, new int[]{ 3664 } }, - { 1106u, new int[]{ 3619 } }, - { 1111u, new int[]{ -363 } }, - { 1155u, new int[]{ 3525 } }, - { 1156u, new int[]{ 3847 } }, - { 1157u, new int[]{ 3562 } }, - { 1158u, new int[]{ 4354 } }, - { 1160u, new int[]{ -334 } }, - { 1181u, new int[]{ 3727 } }, - { 1182u, new int[]{ -355 } }, - { 1183u, new int[]{ -350 } }, - { 1185u, new int[]{ 4190 } }, - { 1187u, new int[]{ -359 } }, - { 1188u, new int[]{ 3654 } }, - { 1189u, new int[]{ 3655 } }, - { 1190u, new int[]{ -347 } }, - { 1191u, new int[]{ -349 } }, - { 1192u, new int[]{ -296 } }, - { 1193u, new int[]{ -319 } }, - { 1194u, new int[]{ 3803 } }, - { 1195u, new int[]{ -331 } }, - { 1196u, new int[]{ -344 } }, - { 1197u, new int[]{ -345 } }, - { 1198u, new int[]{ -303 } }, - { 1199u, new int[]{ -298 } }, - { 1200u, new int[]{ -300 } }, - { 1201u, new int[]{ -301 } }, - { 1202u, new int[]{ -311 } }, - { 1203u, new int[]{ -321 } }, - { 1204u, new int[]{ -313 } }, - { 1205u, new int[]{ -340 } }, - { 1207u, new int[]{ -336 } }, - { 1208u, new int[]{ -294 } }, - { 1209u, new int[]{ -324 } }, - { 1210u, new int[]{ 3626 } }, - { 1211u, new int[]{ -353 } }, - { 1214u, new int[]{ 4375 } }, - { 1216u, new int[]{ 4377 } }, - { 1217u, new int[]{ 4378 } }, - { 1218u, new int[]{ 4380 } }, - { 1219u, new int[]{ 4362 } }, - { 1220u, new int[]{ 4364 } }, - { 1221u, new int[]{ 4368 } }, - { 1222u, new int[]{ 4369 } }, - { 1223u, new int[]{ 4372 } }, - { 1224u, new int[]{ 4373 } }, - { 1225u, new int[]{ 4350 } }, - { 1226u, new int[]{ 4353 } }, - { 1227u, new int[]{ 4357 } }, - { 1229u, new int[]{ -346 } }, - { 1230u, new int[]{ -352 } }, - { 1231u, new int[]{ 5740 } }, - { 1232u, new int[]{ -339 } }, - { 1234u, new int[]{ 4626 } }, - { 1235u, new int[]{ -293 } }, - { 1236u, new int[]{ -292 } }, - { 1237u, new int[]{ -356 } }, - { 1238u, new int[]{ 3984 } }, - { 1239u, new int[]{ 3758 } }, - { 1240u, new int[]{ -306 } }, - { 1244u, new int[]{ -322 } }, - { 1245u, new int[]{ -323 } }, - { 1246u, new int[]{ -338 } }, - { 1266u, new int[]{ -291 } }, - { 1267u, new int[]{ -291 } }, - { 1268u, new int[]{ -291 } }, - { 1270u, new int[]{ 4658 } }, - { 1271u, new int[]{ 4609 } }, - { 1272u, new int[]{ 4631 } }, - { 1273u, new int[]{ 4622 } }, - { 1274u, new int[]{ 4656 } }, - { 1275u, new int[]{ 4624 } }, - { 1276u, new int[]{ 4620 } }, - { 1277u, new int[]{ 3983 } }, - { 1278u, new int[]{ -343 } }, - { 1281u, new int[]{ 4653 } }, - { 1283u, new int[]{ 3825 } }, - { 1288u, new int[]{ -413 } }, - { 1289u, new int[]{ -414 } }, - { 1290u, new int[]{ -362 } }, - { 1291u, new int[]{ -364 } }, - { 1292u, new int[]{ -365 } }, - { 1293u, new int[]{ 4564 } }, - { 1294u, new int[]{ -371 } }, - { 1295u, new int[]{ -465 } }, - { 1296u, new int[]{ -342 } }, - { 1297u, new int[]{ 4648 } }, - { 1298u, new int[]{ 4575 } }, - { 1299u, new int[]{ 4576 } }, - { 1300u, new int[]{ -329 } }, - { 1302u, new int[]{ 4528 } }, - { 1303u, new int[]{ 4511 } }, - { 1304u, new int[]{ 4561 } }, - { 1305u, new int[]{ 4239 } }, - { 1306u, new int[]{ 3554 } }, - { 1307u, new int[]{ -295 } }, - { 1308u, new int[]{ 4578 } }, - { 1309u, new int[]{ 4579 } }, - { 1310u, new int[]{ 4527 } }, - { 1311u, new int[]{ 4629 } }, - { 1312u, new int[]{ -368 } }, - { 1314u, new int[]{ -386 } }, - { 1315u, new int[]{ 4638 } }, - { 1316u, new int[]{ -388 } }, - { 1324u, new int[]{ 4171 } }, - { 1328u, new int[]{ -382 } }, - { 1338u, new int[]{ 4517 } }, - { 1339u, new int[]{ -381 } }, - { 1340u, new int[]{ -367 } }, - { 1341u, new int[]{ -366 } }, - { 1344u, new int[]{ -400 } }, - { 1345u, new int[]{ 4776 } }, - { 1346u, new int[]{ 4613 } }, - { 1347u, new int[]{ -375 } }, - { 1348u, new int[]{ -376 } }, - { 1349u, new int[]{ -369 } }, - { 1350u, new int[]{ -378 } }, - { 1351u, new int[]{ -374 } }, - { 1352u, new int[]{ -410 } }, - { 1353u, new int[]{ -404 } }, - { 1354u, new int[]{ -409 } }, - { 1355u, new int[]{ -408 } }, - { 1356u, new int[]{ -406 } }, - { 1357u, new int[]{ -411 } }, - { 1359u, new int[]{ -312 } }, - { 1360u, new int[]{ 4614 } }, - { 1361u, new int[]{ -379 } }, - { 1362u, new int[]{ 4655 } }, - { 1364u, new int[]{ -572 } }, - { 1365u, new int[]{ -505 } }, - { 1366u, new int[]{ -517 } }, - { 1367u, new int[]{ 4654 } }, - { 1368u, new int[]{ -380 } }, - { 1369u, new int[]{ -377 } }, - { 1371u, new int[]{ 4569 } }, - { 1372u, new int[]{ -373 } }, - { 1373u, new int[]{ -370 } }, - { 1374u, new int[]{ -372 } }, - { 1375u, new int[]{ 4813 } }, - { 1376u, new int[]{ 4811 } }, - { 1377u, new int[]{ 4812 } }, - { 1378u, new int[]{ 4659 } }, - { 1381u, new int[]{ 4657 } }, - { 1382u, new int[]{ -394 } }, - { 1404u, new int[]{ 6203 } }, - { 1405u, new int[]{ 4744 } }, - { 1406u, new int[]{ -425 } }, - { 1409u, new int[]{ 4745 } }, - { 1410u, new int[]{ -383 } }, - { 1414u, new int[]{ -396 } }, - { 1415u, new int[]{ 4625 } }, - { 1416u, new int[]{ 4642 } }, - { 1417u, new int[]{ -491 } }, - { 1418u, new int[]{ -564 } }, - { 1419u, new int[]{ -886 } }, - { 1420u, new int[]{ 4514 } }, - { 1421u, new int[]{ 4512 } }, - { 1424u, new int[]{ -495 } }, - { 1425u, new int[]{ -407 } }, - { 1426u, new int[]{ 4808 } }, - { 1427u, new int[]{ -528 } }, - { 1428u, new int[]{ -397 } }, - { 1429u, new int[]{ -499 } }, - { 1430u, new int[]{ 6700 } }, - { 1432u, new int[]{ -64 } }, - { 1433u, new int[]{ -395 } }, - { 1437u, new int[]{ -531 } }, - { 1438u, new int[]{ 5487 } }, - { 1439u, new int[]{ 5764 } }, - { 1443u, new int[]{ -403 } }, - { 1445u, new int[]{ -398 } }, - { 1448u, new int[]{ -402 } }, - { 1449u, new int[]{ -393 } }, - { 1450u, new int[]{ 4810 } }, - { 1451u, new int[]{ -392 } }, - { 1452u, new int[]{ 8241, 8241, 8241, 8241, 8241, 8241 } }, - { 1453u, new int[]{ -412 } }, - { 1471u, new int[]{ -405 } }, - { 1472u, new int[]{ -419 } }, - { 1473u, new int[]{ 3429 } }, - { 1474u, new int[]{ -423 } }, - { 1475u, new int[]{ -424 } }, - { 1478u, new int[]{ -532 } }, - { 1479u, new int[]{ -533 } }, - { 1480u, new int[]{ -421 } }, - { 1481u, new int[]{ -437 } }, - { 1482u, new int[]{ 8148 } }, - { 1483u, new int[]{ 3661 } }, - { 1487u, new int[]{ -415 } }, - { 1488u, new int[]{ -443 } }, - { 1489u, new int[]{ -385 } }, - { 1490u, new int[]{ 4954 } }, - { 1491u, new int[]{ 4871 } }, - { 1496u, new int[]{ -578 } }, - { 1498u, new int[]{ 4878 } }, - { 1499u, new int[]{ -401 } }, - { 1501u, new int[]{ -399 } }, - { 1502u, new int[]{ -416 } }, - { 1504u, new int[]{ -456 } }, - { 1506u, new int[]{ -420 } }, - { 1507u, new int[]{ -434 } }, - { 1508u, new int[]{ -435 } }, - { 1509u, new int[]{ -449 } }, - { 1510u, new int[]{ -389 } }, - { 1519u, new int[]{ -431 } }, - { 1521u, new int[]{ -390 } }, - { 1522u, new int[]{ -391 } }, - { 1523u, new int[]{ -422 } }, - { 1524u, new int[]{ 5669 } }, - { 1525u, new int[]{ 4939 } }, - { 1526u, new int[]{ -457 } }, - { 1527u, new int[]{ -458 } }, - { 1528u, new int[]{ -432 } }, - { 1529u, new int[]{ -440 } }, - { 1530u, new int[]{ -442 } }, - { 1531u, new int[]{ -1017 } }, - { 1533u, new int[]{ -426 } }, - { 1535u, new int[]{ -452 } }, - { 1536u, new int[]{ 5199 } }, - { 1537u, new int[]{ -466 } }, - { 1539u, new int[]{ 5567 } }, - { 1541u, new int[]{ -450 } }, - { 1542u, new int[]{ -451 } }, - { 1543u, new int[]{ -453 } }, - { 1561u, new int[]{ 5045 } }, - { 1562u, new int[]{ -430 } }, - { 1563u, new int[]{ -436 } }, - { 1564u, new int[]{ -448 } }, - { 1565u, new int[]{ 4904 } }, - { 1566u, new int[]{ -444 } }, - { 1567u, new int[]{ -445 } }, - { 1568u, new int[]{ -446 } }, - { 1571u, new int[]{ -417 } }, - { 1572u, new int[]{ 7757 } }, - { 1573u, new int[]{ -438 } }, - { 1574u, new int[]{ 2927 } }, - { 1575u, new int[]{ -441 } }, - { 1577u, new int[]{ 4869 } }, - { 1578u, new int[]{ -447 } }, - { 1581u, new int[]{ -439 } }, - { 1583u, new int[]{ -477 } }, - { 1584u, new int[]{ -468 } }, - { 1592u, new int[]{ 5219 } }, - { 1599u, new int[]{ -455 } }, - { 1600u, new int[]{ -427 } }, - { 1601u, new int[]{ -428 } }, - { 1602u, new int[]{ -418 } }, - { 1603u, new int[]{ 3923 } }, - { 1604u, new int[]{ 2263 } }, - { 1605u, new int[]{ 5186 } }, - { 1606u, new int[]{ -472 } }, - { 1607u, new int[]{ -467 } }, - { 1608u, new int[]{ -475 } }, - { 1609u, new int[]{ 5216 } }, - { 1610u, new int[]{ -492 } }, - { 1619u, new int[]{ -454 } }, - { 1620u, new int[]{ -464 } }, - { 1622u, new int[]{ -433 } }, - { 1623u, new int[]{ -429 } }, - { 1627u, new int[]{ -476 } }, - { 1628u, new int[]{ -470 } }, - { 1631u, new int[]{ 3429 } }, - { 1632u, new int[]{ 5751 } }, - { 1634u, new int[]{ -469 } }, - { 1637u, new int[]{ -484 } }, - { 1649u, new int[]{ -459 } }, - { 1654u, new int[]{ -519 } }, - { 1664u, new int[]{ -461 } }, - { 1665u, new int[]{ -462 } }, - { 1666u, new int[]{ -463 } }, - { 1667u, new int[]{ -486 } }, - { 1668u, new int[]{ 5356 } }, - { 1669u, new int[]{ -516 } }, - { 1670u, new int[]{ -488 } }, - { 1671u, new int[]{ -482 } }, - { 1672u, new int[]{ -489 } }, - { 1673u, new int[]{ -474 } }, - { 1674u, new int[]{ -609 } }, - { 1675u, new int[]{ 6385 } }, - { 1678u, new int[]{ -487 } }, - { 1679u, new int[]{ -518 } }, - { 1680u, new int[]{ -351 } }, - { 1681u, new int[]{ -507 } }, - { 1682u, new int[]{ -557 } }, - { 1683u, new int[]{ 5737 } }, - { 1684u, new int[]{ -562 } }, - { 1685u, new int[]{ -471 } }, - { 1686u, new int[]{ -473 } }, - { 1687u, new int[]{ -483 } }, - { 1703u, new int[]{ -478 } }, - { 1704u, new int[]{ -481 } }, - { 1705u, new int[]{ -480 } }, - { 1706u, new int[]{ -479 } }, - { 1709u, new int[]{ -608 } }, - { 1710u, new int[]{ -590 } }, - { 1711u, new int[]{ -607 } }, - { 1712u, new int[]{ -592 } }, - { 1714u, new int[]{ -559 } }, - { 1716u, new int[]{ -611 } }, - { 1717u, new int[]{ -541 } }, - { 1718u, new int[]{ 5775 } }, - { 1719u, new int[]{ 5735 } }, - { 1720u, new int[]{ -544 } }, - { 1721u, new int[]{ -563 } }, - { 1732u, new int[]{ -521 } }, - { 1733u, new int[]{ -509 } }, - { 1738u, new int[]{ -588 } }, - { 1739u, new int[]{ 7763 } }, - { 1740u, new int[]{ 5689, 5691, -587 } }, - { 1741u, new int[]{ -485 } }, - { 1744u, new int[]{ -493 } }, - { 1745u, new int[]{ -494 } }, - { 1746u, new int[]{ -497 } }, - { 1747u, new int[]{ -501 } }, - { 1748u, new int[]{ -502 } }, - { 1749u, new int[]{ -503 } }, - { 1750u, new int[]{ -500 } }, - { 1752u, new int[]{ 655 } }, - { 1753u, new int[]{ 6118 } }, - { 1754u, new int[]{ -594 } }, - { 1755u, new int[]{ 5631 } }, - { 1757u, new int[]{ -624 } }, - { 1759u, new int[]{ -560 } }, - { 1761u, new int[]{ -604 } }, - { 1764u, new int[]{ -523 } }, - { 1766u, new int[]{ 6089 } }, - { 1767u, new int[]{ 5709 } }, - { 1770u, new int[]{ -585 } }, - { 1771u, new int[]{ -540 } }, - { 1772u, new int[]{ -508 } }, - { 1774u, new int[]{ -490 } }, - { 1780u, new int[]{ -511 } }, - { 1793u, new int[]{ -660 } }, - { 1794u, new int[]{ -593 } }, - { 1795u, new int[]{ -514 } }, - { 1797u, new int[]{ -579 } }, - { 1798u, new int[]{ -613 } }, - { 1803u, new int[]{ -524 } }, - { 1805u, new int[]{ 6392 } }, - { 1807u, new int[]{ -543 } }, - { 1808u, new int[]{ -630 } }, - { 1811u, new int[]{ -515 } }, - { 1814u, new int[]{ 5736 } }, - { 1815u, new int[]{ -622 } }, - { 1816u, new int[]{ -623 } }, - { 1817u, new int[]{ -589 } }, - { 1818u, new int[]{ -635 } }, - { 1819u, new int[]{ -535 } }, - { 1820u, new int[]{ -522 } }, - { 1821u, new int[]{ 5756 } }, - { 1838u, new int[]{ -520 } }, - { 1841u, new int[]{ -512 } }, - { 1842u, new int[]{ -513 } }, - { 1843u, new int[]{ -506 } }, - { 1844u, new int[]{ -626 } }, - { 1845u, new int[]{ -527 } }, - { 1846u, new int[]{ -530 } }, - { 1847u, new int[]{ -627 } }, - { 1848u, new int[]{ -556 } }, - { 1849u, new int[]{ -536 } }, - { 1850u, new int[]{ -547 } }, - { 1851u, new int[]{ -545 } }, - { 1852u, new int[]{ -549 } }, - { 1853u, new int[]{ -538 } }, - { 1854u, new int[]{ -867 } }, - { 1861u, new int[]{ -510 } }, - { 1862u, new int[]{ -534 } }, - { 1863u, new int[]{ -659 } }, - { 1864u, new int[]{ 6038 } }, - { 1867u, new int[]{ -558 } }, - { 1869u, new int[]{ -554 } }, - { 1870u, new int[]{ -568 } }, - { 1872u, new int[]{ -642 } }, - { 1875u, new int[]{ -582 } }, - { 1877u, new int[]{ -654 } }, - { 1888u, new int[]{ -656 } }, - { 1889u, new int[]{ -612 } }, - { 1890u, new int[]{ -636 } }, - { 1891u, new int[]{ -617 } }, - { 1893u, new int[]{ -529 } }, - { 1901u, new int[]{ 5687 } }, - { 1904u, new int[]{ 5783 } }, - { 1905u, new int[]{ -567 } }, - { 1906u, new int[]{ -548 } }, - { 1907u, new int[]{ -551 } }, - { 1908u, new int[]{ -555 } }, - { 1909u, new int[]{ -638 } }, - { 1913u, new int[]{ -632 } }, - { 1914u, new int[]{ -633 } }, - { 1915u, new int[]{ -634 } }, - { 1923u, new int[]{ -537 } }, - { 1925u, new int[]{ -645 } }, - { 1926u, new int[]{ -615 } }, - { 1927u, new int[]{ 6910 } }, - { 1928u, new int[]{ -653 } }, - { 1929u, new int[]{ -553 } }, - { 1930u, new int[]{ -621 } }, - { 1931u, new int[]{ -569 } }, - { 1932u, new int[]{ -640 } }, - { 1934u, new int[]{ -625 } }, - { 1935u, new int[]{ -570 } }, - { 1936u, new int[]{ -599 } }, - { 1937u, new int[]{ -601 } }, - { 1938u, new int[]{ -600 } }, - { 1939u, new int[]{ -596 } }, - { 1940u, new int[]{ -597 } }, - { 1941u, new int[]{ -605 } }, - { 1943u, new int[]{ -552 } }, - { 1944u, new int[]{ -575 } }, - { 1945u, new int[]{ -649 } }, - { 1947u, new int[]{ -546 } }, - { 1948u, new int[]{ -565 } }, - { 1949u, new int[]{ -561 } }, - { 1950u, new int[]{ -566 } }, - { 1951u, new int[]{ -619 } }, - { 1957u, new int[]{ -591 } }, - { 1958u, new int[]{ -652 } }, - { 1959u, new int[]{ -614 } }, - { 1960u, new int[]{ -648 } }, - { 1961u, new int[]{ -583 } }, - { 1962u, new int[]{ -646 } }, - { 1963u, new int[]{ -647 } }, - { 1964u, new int[]{ -631 } }, - { 1965u, new int[]{ -629 } }, - { 1967u, new int[]{ -658 } }, - { 1973u, new int[]{ -574 } }, - { 1974u, new int[]{ 2142 } }, - { 1983u, new int[]{ 5782 } }, - { 1984u, new int[]{ -639 } }, - { 1985u, new int[]{ -643 } }, - { 1987u, new int[]{ 6392 } }, - { 1988u, new int[]{ -661 } }, - { 1989u, new int[]{ -542 } }, - { 1990u, new int[]{ -602 } }, - { 1991u, new int[]{ -606 } }, - { 1992u, new int[]{ -577 } }, - { 1993u, new int[]{ -603 } }, - { 1994u, new int[]{ 5722 } }, - { 1997u, new int[]{ -598 } }, - { 1998u, new int[]{ -628 } }, - { 2000u, new int[]{ 34 } }, - { 2001u, new int[]{ -584 } }, - { 2002u, new int[]{ -581 } }, - { 2003u, new int[]{ -637 } }, - { 2004u, new int[]{ -595 } }, - { 2005u, new int[]{ -586 } }, - { 2006u, new int[]{ -539 } }, - { 2007u, new int[]{ -616 } }, - { 2008u, new int[]{ -644 } }, - { 2009u, new int[]{ -676 } }, - { 2012u, new int[]{ -610 } }, - { 2013u, new int[]{ 6385 } }, - { 2014u, new int[]{ -662 } }, - { 2015u, new int[]{ -651 } }, - { 2018u, new int[]{ -657 } }, - { 2020u, new int[]{ -576 } }, - { 2023u, new int[]{ -641 } }, - { 2029u, new int[]{ -663 } }, - { 2036u, new int[]{ -571 } }, - { 2037u, new int[]{ -674 } }, - { 2038u, new int[]{ -679 } }, - { 2039u, new int[]{ -700 } }, - { 2040u, new int[]{ -666 } }, - { 2041u, new int[]{ -667 } }, - { 2042u, new int[]{ -683 } }, - { 2043u, new int[]{ -686 } }, - { 2044u, new int[]{ -711 } }, - { 2045u, new int[]{ -708 } }, - { 2054u, new int[]{ -618 } }, - { 2055u, new int[]{ -620 } }, - { 2057u, new int[]{ -668 } }, - { 2058u, new int[]{ -550 } }, - { 2060u, new int[]{ -650 } }, - { 2062u, new int[]{ -670 } }, - { 2063u, new int[]{ -671 } }, - { 2064u, new int[]{ -672 } }, - { 2070u, new int[]{ 3047 } }, - { 2075u, new int[]{ -684 } }, - { 2076u, new int[]{ -720 } }, - { 2077u, new int[]{ 7435 } }, - { 2080u, new int[]{ -665 } }, - { 2081u, new int[]{ -655 } }, - { 2082u, new int[]{ -680 } }, - { 2083u, new int[]{ -685 } }, - { 2084u, new int[]{ -677 } }, - { 2085u, new int[]{ -699 } }, - { 2086u, new int[]{ -698 } }, - { 2087u, new int[]{ 6903 } }, - { 2088u, new int[]{ -696 } }, - { 2089u, new int[]{ -697 } }, - { 2090u, new int[]{ -682 } }, - { 2091u, new int[]{ -675 } }, - { 2092u, new int[]{ -681 } }, - { 2093u, new int[]{ -688 } }, - { 2103u, new int[]{ -678 } }, - { 2107u, new int[]{ -689 } }, - { 2108u, new int[]{ -690 } }, - { 2109u, new int[]{ -691 } }, - { 2110u, new int[]{ -693 } }, - { 2111u, new int[]{ -694 } }, - { 2113u, new int[]{ -695 } }, - { 2121u, new int[]{ 7092 } }, - { 2122u, new int[]{ -692 } }, - { 2127u, new int[]{ 6996 } }, - { 2128u, new int[]{ -849 } }, - { 2134u, new int[]{ -709 } }, - { 2136u, new int[]{ 7127 } }, - { 2137u, new int[]{ -732 } }, - { 2138u, new int[]{ -712 } }, - { 2145u, new int[]{ -704 } }, - { 2146u, new int[]{ -705 } }, - { 2147u, new int[]{ -735 } }, - { 2148u, new int[]{ -687 } }, - { 2150u, new int[]{ -703 } }, - { 2151u, new int[]{ -710 } }, - { 2152u, new int[]{ -724 } }, - { 2153u, new int[]{ -729 } }, - { 2154u, new int[]{ 2665 } }, - { 2158u, new int[]{ -717 } }, - { 2159u, new int[]{ -718 } }, - { 2160u, new int[]{ -726 } }, - { 2161u, new int[]{ -701 } }, - { 2162u, new int[]{ -715 } }, - { 2163u, new int[]{ -722 } }, - { 2164u, new int[]{ -725 } }, - { 2165u, new int[]{ -731 } }, - { 2166u, new int[]{ -713 } }, - { 2171u, new int[]{ -760 } }, - { 2172u, new int[]{ -764 } }, - { 2177u, new int[]{ -716 } }, - { 2181u, new int[]{ -714 } }, - { 2183u, new int[]{ -727 } }, - { 2184u, new int[]{ -733 } }, - { 2185u, new int[]{ -765 } }, - { 2189u, new int[]{ -719 } }, - { 2190u, new int[]{ -723 } }, - { 2192u, new int[]{ -707 } }, - { 2193u, new int[]{ -759 } }, - { 2196u, new int[]{ -755 } }, - { 2197u, new int[]{ -749 } }, - { 2199u, new int[]{ -721 } }, - { 2200u, new int[]{ -730 } }, - { 2203u, new int[]{ -728 } }, - { 2210u, new int[]{ 7225 } }, - { 2211u, new int[]{ -738 } }, - { 2212u, new int[]{ -751 } }, - { 2213u, new int[]{ -812 } }, - { 2214u, new int[]{ -813 } }, - { 2215u, new int[]{ -814 } }, - { 2216u, new int[]{ -771 } }, - { 2217u, new int[]{ -737 } }, - { 2219u, new int[]{ -706 } }, - { 2222u, new int[]{ -734 } }, - { 2223u, new int[]{ 7440 } }, - { 2233u, new int[]{ -548 } }, - { 2234u, new int[]{ -756 } }, - { 2235u, new int[]{ -757 } }, - { 2236u, new int[]{ -746 } }, - { 2237u, new int[]{ -770 } }, - { 2248u, new int[]{ -745 } }, - { 2259u, new int[]{ -788 } }, - { 2260u, new int[]{ -774 } }, - { 2262u, new int[]{ -753 } }, - { 2265u, new int[]{ -754 } }, - { 2266u, new int[]{ -773 } }, - { 2267u, new int[]{ -747 } }, - { 2269u, new int[]{ -758 } }, - { 2270u, new int[]{ -741 } }, - { 2271u, new int[]{ -740 } }, - { 2273u, new int[]{ -750 } }, - { 2275u, new int[]{ -766 } }, - { 2276u, new int[]{ 1644 } }, - { 2277u, new int[]{ 1185 } }, - { 2278u, new int[]{ 1801 } }, - { 2279u, new int[]{ -767 } }, - { 2281u, new int[]{ -736 } }, - { 2283u, new int[]{ -748 } }, - { 2286u, new int[]{ -742 } }, - { 2287u, new int[]{ -769 } }, - { 2291u, new int[]{ -743 } }, - { 2294u, new int[]{ 7647 } }, - { 2295u, new int[]{ 7648 } }, - { 2297u, new int[]{ 7659 } }, - { 2299u, new int[]{ -763 } }, - { 2300u, new int[]{ -762 } }, - { 2301u, new int[]{ -761 } }, - { 2302u, new int[]{ 7669 } }, - { 2308u, new int[]{ -752 } }, - { 2313u, new int[]{ -777 } }, - { 2314u, new int[]{ -777 } }, - { 2317u, new int[]{ -744 } }, - { 2320u, new int[]{ -800 } }, - { 2322u, new int[]{ -802 } }, - { 2323u, new int[]{ -801 } }, - { 2333u, new int[]{ 7675 } }, - { 2334u, new int[]{ -776 } }, - { 2335u, new int[]{ -780 } }, - { 2336u, new int[]{ -58 } }, - { 2338u, new int[]{ 7939 } }, - { 2339u, new int[]{ -806 } }, - { 2345u, new int[]{ -789 } }, - { 2346u, new int[]{ -790 } }, - { 2347u, new int[]{ -791 } }, - { 2348u, new int[]{ -792 } }, - { 2349u, new int[]{ -793 } }, - { 2350u, new int[]{ -794 } }, - { 2351u, new int[]{ -795 } }, - { 2352u, new int[]{ -796 } }, - { 2353u, new int[]{ -786 } }, - { 2354u, new int[]{ -787 } }, - { 2355u, new int[]{ -779 } }, - { 2357u, new int[]{ 7662 } }, - { 2358u, new int[]{ 7731 } }, - { 2363u, new int[]{ 2665 } }, - { 2364u, new int[]{ -782 } }, - { 2365u, new int[]{ 7702 } }, - { 2366u, new int[]{ -783 } }, - { 2367u, new int[]{ -775 } }, - { 2368u, new int[]{ -785 } }, - { 2369u, new int[]{ -768 } }, - { 2371u, new int[]{ 7667 } }, - { 2372u, new int[]{ 7727 } }, - { 2373u, new int[]{ 8063 } }, - { 2374u, new int[]{ -797 } }, - { 2375u, new int[]{ -798 } }, - { 2376u, new int[]{ 7678 } }, - { 2377u, new int[]{ -778 } }, - { 2378u, new int[]{ -804 } }, - { 2379u, new int[]{ -803 } }, - { 2380u, new int[]{ -805 } }, - { 2382u, new int[]{ 7954 } }, - { 2390u, new int[]{ -815 } }, - { 2391u, new int[]{ -809 } }, - { 2393u, new int[]{ -818 } }, - { 2394u, new int[]{ 10217, 10217 } }, - { 2395u, new int[]{ -868 } }, - { 2396u, new int[]{ 8543 } }, - { 2397u, new int[]{ -873 } }, - { 2398u, new int[]{ -822 } }, - { 2399u, new int[]{ 7976 } }, - { 2400u, new int[]{ -811 } }, - { 2402u, new int[]{ -824 } }, - { 2403u, new int[]{ 7922 } }, - { 2407u, new int[]{ -825 } }, - { 2408u, new int[]{ -834 } }, - { 2410u, new int[]{ -829 } }, - { 2419u, new int[]{ -871 } }, - { 2420u, new int[]{ -833 } }, - { 2422u, new int[]{ -826 } }, - { 2423u, new int[]{ 8129 } }, - { 2424u, new int[]{ 8061 } }, - { 2425u, new int[]{ -832 } }, - { 2427u, new int[]{ -781 } }, - { 2431u, new int[]{ 8504 } }, - { 2432u, new int[]{ -872 } }, - { 2433u, new int[]{ 8499 } }, - { 2434u, new int[]{ -852 } }, - { 2435u, new int[]{ -857 } }, - { 2436u, new int[]{ -799 } }, - { 2438u, new int[]{ -816 } }, - { 2439u, new int[]{ -772 } }, - { 2440u, new int[]{ -827 } }, - { 2445u, new int[]{ 8547 } }, - { 2446u, new int[]{ -784 } }, - { 2447u, new int[]{ 4638 } }, - { 2448u, new int[]{ -831 } }, - { 2453u, new int[]{ 8060 } }, - { 2454u, new int[]{ -919 } }, - { 2455u, new int[]{ 8374 } }, - { 2456u, new int[]{ -903 } }, - { 2457u, new int[]{ -904 } }, - { 2460u, new int[]{ -823 } }, - { 2462u, new int[]{ 8264, 8264, 8264 } }, - { 2469u, new int[]{ -820 } }, - { 2470u, new int[]{ -847 } }, - { 2473u, new int[]{ -835 } }, - { 2474u, new int[]{ 8361 } }, - { 2475u, new int[]{ -82 } }, - { 2476u, new int[]{ 8143 } }, - { 2477u, new int[]{ -318 } }, - { 2478u, new int[]{ -900 } }, - { 2479u, new int[]{ -817 } }, - { 2481u, new int[]{ -821 } }, - { 2487u, new int[]{ -911 } }, - { 2488u, new int[]{ 8544 } }, - { 2489u, new int[]{ 8250 } }, - { 2497u, new int[]{ -836 } }, - { 2498u, new int[]{ 4896 } }, - { 2499u, new int[]{ -843 } }, - { 2500u, new int[]{ -841 } }, - { 2501u, new int[]{ -842 } }, - { 2502u, new int[]{ 7955 } }, - { 2512u, new int[]{ 7981 } }, - { 2513u, new int[]{ 8225 } }, - { 2514u, new int[]{ -892 } }, - { 2515u, new int[]{ 8297 } }, - { 2519u, new int[]{ 9493 } }, - { 2521u, new int[]{ -848 } }, - { 2522u, new int[]{ 8232 } }, - { 2524u, new int[]{ 8263 } }, - { 2525u, new int[]{ -863 } }, - { 2527u, new int[]{ -906 } }, - { 2528u, new int[]{ -907 } }, - { 2529u, new int[]{ -910 } }, - { 2530u, new int[]{ 8341 } }, - { 2531u, new int[]{ -858 } }, - { 2532u, new int[]{ 8231 } }, - { 2533u, new int[]{ -901 } }, - { 2534u, new int[]{ 8501 } }, - { 2535u, new int[]{ 8252 } }, - { 2537u, new int[]{ 8500 } }, - { 2538u, new int[]{ -840 } }, - { 2541u, new int[]{ -828 } }, - { 2545u, new int[]{ -830 } }, - { 2547u, new int[]{ -839 } }, - { 2548u, new int[]{ -838 } }, - { 2549u, new int[]{ -837 } }, - { 2550u, new int[]{ -328 } }, - { 2551u, new int[]{ 7929 } }, - { 2552u, new int[]{ -328 } }, - { 2558u, new int[]{ 8155 } }, - { 2559u, new int[]{ 8271 } }, - { 2560u, new int[]{ -882 } }, - { 2561u, new int[]{ -885 } }, - { 2562u, new int[]{ -884 } }, - { 2563u, new int[]{ 8167 } }, - { 2569u, new int[]{ 8221 } }, - { 2570u, new int[]{ 8262, 8262, 8262 } }, - { 2571u, new int[]{ -856 } }, - { 2572u, new int[]{ 8236 } }, - { 2573u, new int[]{ 8355 } }, - { 2574u, new int[]{ 8578 } }, - { 2575u, new int[]{ -879 } }, - { 2576u, new int[]{ 8352 } }, - { 2577u, new int[]{ 8185 } }, - { 2578u, new int[]{ -853 } }, - { 2579u, new int[]{ -888 } }, - { 2580u, new int[]{ -854 } }, - { 2581u, new int[]{ 9440 } }, - { 2582u, new int[]{ 8822 } }, - { 2585u, new int[]{ 8234 } }, - { 2586u, new int[]{ 8272 } }, - { 2587u, new int[]{ 8569 } }, - { 2588u, new int[]{ 8619 } }, - { 2589u, new int[]{ -881 } }, - { 2590u, new int[]{ -874 } }, - { 2591u, new int[]{ -875 } }, - { 2592u, new int[]{ 8201 } }, - { 2593u, new int[]{ 8653 } }, - { 2595u, new int[]{ 8574 } }, - { 2597u, new int[]{ 8899 } }, - { 2598u, new int[]{ 8912 } }, - { 2599u, new int[]{ 8655 } }, - { 2612u, new int[]{ 8165 } }, - { 2613u, new int[]{ 8260 } }, - { 2615u, new int[]{ -898 } }, - { 2616u, new int[]{ 8357 } }, - { 2618u, new int[]{ 8230 } }, - { 2619u, new int[]{ 8227 } }, - { 2620u, new int[]{ 3204 } }, - { 2621u, new int[]{ 4269 } }, - { 2622u, new int[]{ -899 } }, - { 2623u, new int[]{ -883 } }, - { 2624u, new int[]{ 2906 } }, - { 2625u, new int[]{ 8292 } }, - { 2626u, new int[]{ -328 } }, - { 2628u, new int[]{ -897 } }, - { 2629u, new int[]{ 8266 } }, - { 2631u, new int[]{ -846 } }, - { 2632u, new int[]{ -851 } }, - { 2633u, new int[]{ 8265 } }, - { 2634u, new int[]{ 8224 } }, - { 2635u, new int[]{ -845 } }, - { 2636u, new int[]{ 8910 } }, - { 2637u, new int[]{ 8193 } }, - { 2639u, new int[]{ 8270 } }, - { 2640u, new int[]{ 5631 } }, - { 2641u, new int[]{ -859 } }, - { 2642u, new int[]{ -893 } }, - { 2643u, new int[]{ 8246 } }, - { 2644u, new int[]{ -339 } }, - { 2647u, new int[]{ -891 } }, - { 2648u, new int[]{ -864 } }, - { 2649u, new int[]{ -50 } }, - { 2650u, new int[]{ -880 } }, - { 2651u, new int[]{ 8622 } }, - { 2652u, new int[]{ 8576 } }, - { 2653u, new int[]{ 8575 } }, - { 2654u, new int[]{ -339 } }, - { 2655u, new int[]{ 8182 } }, - { 2656u, new int[]{ -895 } }, - { 2657u, new int[]{ -314 } }, - { 2658u, new int[]{ 8502 } }, - { 2659u, new int[]{ 8548 } }, - { 2660u, new int[]{ 8577 } }, - { 2661u, new int[]{ -870 } }, - { 2662u, new int[]{ -914 } }, - { 2663u, new int[]{ -890 } }, - { 2664u, new int[]{ -908 } }, - { 2665u, new int[]{ 750 } }, - { 2667u, new int[]{ -905 } }, - { 2668u, new int[]{ -921 } }, - { 2669u, new int[]{ 6738 } }, - { 2670u, new int[]{ -920 } }, - { 2671u, new int[]{ 8261 } }, - { 2672u, new int[]{ 8503 } }, - { 2673u, new int[]{ -887 } }, - { 2674u, new int[]{ 8550 } }, - { 2675u, new int[]{ 750 } }, - { 2676u, new int[]{ 750 } }, - { 2682u, new int[]{ 750 } }, - { 2683u, new int[]{ 750 } }, - { 2684u, new int[]{ 8621 } }, - { 2685u, new int[]{ 8175 } }, - { 2686u, new int[]{ 8268, 8268, 8268, 8268, 8268, 8268, 8268, 8268 } }, - { 2696u, new int[]{ -894 } }, - { 2697u, new int[]{ -328 } }, - { 2699u, new int[]{ -808 } }, - { 2701u, new int[]{ 8341 } }, - { 2702u, new int[]{ -865 } }, - { 2705u, new int[]{ -861 } }, - { 2706u, new int[]{ -328 } }, - { 2707u, new int[]{ -869 } }, - { 2708u, new int[]{ -909 } }, - { 2709u, new int[]{ -896 } }, - { 2710u, new int[]{ -844 } }, - { 2711u, new int[]{ -994 } }, - { 2712u, new int[]{ -912 } }, - { 2719u, new int[]{ -673 } }, - { 2721u, new int[]{ -878 } }, - { 2722u, new int[]{ -913 } }, - { 2724u, new int[]{ -877 } }, - { 2732u, new int[]{ 8549 } }, - { 2734u, new int[]{ -860 } }, - { 2735u, new int[]{ 8210 } }, - { 2736u, new int[]{ -855 } }, - { 2737u, new int[]{ -850 } }, - { 2738u, new int[]{ 8789 } }, - { 2739u, new int[]{ -924 } }, - { 2740u, new int[]{ -902 } }, - { 2743u, new int[]{ 9147 } }, - { 2744u, new int[]{ -889 } }, - { 2745u, new int[]{ -915 } }, - { 2746u, new int[]{ -916 } }, - { 2747u, new int[]{ 3044 } }, - { 2748u, new int[]{ -917 } }, - { 2749u, new int[]{ 8916 } }, - { 2751u, new int[]{ -328 } }, - { 2763u, new int[]{ -866 } }, - { 2764u, new int[]{ 8822 } }, - { 2767u, new int[]{ -922 } }, - { 2768u, new int[]{ -923 } }, - { 2770u, new int[]{ -918 } }, - { 2776u, new int[]{ -876 } }, - { 2777u, new int[]{ 8561 } }, - { 2778u, new int[]{ 8528 } }, - { 2780u, new int[]{ 8619 } }, - { 2782u, new int[]{ -953 } }, - { 2783u, new int[]{ -939 } }, - { 2784u, new int[]{ -954 } }, - { 2785u, new int[]{ -930 } }, - { 2786u, new int[]{ -936 } }, - { 2787u, new int[]{ -937 } }, - { 2788u, new int[]{ -938 } }, - { 2789u, new int[]{ -931 } }, - { 2790u, new int[]{ -926 } }, - { 2791u, new int[]{ -940 } }, - { 2792u, new int[]{ -943 } }, - { 2794u, new int[]{ -933 } }, - { 2795u, new int[]{ -944 } }, - { 2796u, new int[]{ -957 } }, - { 2797u, new int[]{ -971 } }, - { 2804u, new int[]{ -955 } }, - { 2806u, new int[]{ 9189 } }, - { 2807u, new int[]{ 9405 } }, - { 2809u, new int[]{ -942 } }, - { 2811u, new int[]{ -934 } }, - { 2812u, new int[]{ -935 } }, - { 2813u, new int[]{ -932 } }, - { 2814u, new int[]{ -959 } }, - { 2815u, new int[]{ -328 } }, - { 2816u, new int[]{ -996 } }, - { 2817u, new int[]{ -925 } }, - { 2821u, new int[]{ -929 } }, - { 2822u, new int[]{ -947 } }, - { 2823u, new int[]{ -928 } }, - { 2824u, new int[]{ -941 } }, - { 2825u, new int[]{ -948 } }, - { 2826u, new int[]{ -949 } }, - { 2827u, new int[]{ -950 } }, - { 2828u, new int[]{ -945 } }, - { 2829u, new int[]{ -927 } }, - { 2830u, new int[]{ -998 } }, - { 2831u, new int[]{ -1005 } }, - { 2833u, new int[]{ -328 } }, - { 2834u, new int[]{ -328 } }, - { 2835u, new int[]{ -328 } }, - { 2836u, new int[]{ -328 } }, - { 2837u, new int[]{ -328 } }, - { 2840u, new int[]{ 8247 } }, - { 2842u, new int[]{ -951 } }, - { 2845u, new int[]{ -952 } }, - { 2846u, new int[]{ -946 } }, - { 2850u, new int[]{ -1058 } }, - { 2851u, new int[]{ 9178 } }, - { 2852u, new int[]{ -940 } }, - { 2854u, new int[]{ -984 } }, - { 2864u, new int[]{ -964 } }, - { 2865u, new int[]{ -965 } }, - { 2866u, new int[]{ -967 } }, - { 2867u, new int[]{ -956 } }, - { 2872u, new int[]{ -961 } }, - { 2873u, new int[]{ -958 } }, - { 2874u, new int[]{ -969 } }, - { 2875u, new int[]{ -968 } }, - { 2876u, new int[]{ -1004 } }, - { 2877u, new int[]{ -977 } }, - { 2878u, new int[]{ -966 } }, - { 2879u, new int[]{ -960 } }, - { 2880u, new int[]{ -979 } }, - { 2882u, new int[]{ -1074 } }, - { 2883u, new int[]{ -972 } }, - { 2884u, new int[]{ -976 } }, - { 2885u, new int[]{ -978 } }, - { 2886u, new int[]{ -970 } }, - { 2887u, new int[]{ -962 } }, - { 2888u, new int[]{ -963 } }, - { 2889u, new int[]{ -973 } }, - { 2902u, new int[]{ -991, 9353 } }, - { 2904u, new int[]{ -999 } }, - { 2905u, new int[]{ -981 } }, - { 2906u, new int[]{ -980 } }, - { 2911u, new int[]{ -989 } }, - { 2912u, new int[]{ -983 } }, - { 2917u, new int[]{ -985 } }, - { 2918u, new int[]{ -986 } }, - { 2919u, new int[]{ -987 } }, - { 2920u, new int[]{ -974 } }, - { 2921u, new int[]{ -992 } }, - { 2922u, new int[]{ 2190 } }, - { 2924u, new int[]{ -993 } }, - { 2925u, new int[]{ -1014 } }, - { 2926u, new int[]{ 9398 } }, - { 2927u, new int[]{ 9396 } }, - { 2928u, new int[]{ 9424 } }, - { 2929u, new int[]{ 9439 } }, - { 2930u, new int[]{ -1002 } }, - { 2931u, new int[]{ -988 } }, - { 2932u, new int[]{ -990 } }, - { 2933u, new int[]{ -1007 } }, - { 2942u, new int[]{ -975 } }, - { 2943u, new int[]{ -982 } }, - { 2945u, new int[]{ 9452 } }, - { 2946u, new int[]{ -328 } }, - { 2947u, new int[]{ -995 } }, - { 2954u, new int[]{ -995 } }, - { 2955u, new int[]{ -995 } }, - { 2956u, new int[]{ -328 } }, - { 2957u, new int[]{ 9642 } }, - { 2958u, new int[]{ -1003 } }, - { 2959u, new int[]{ 9650 } }, - { 2960u, new int[]{ -328 } }, - { 2961u, new int[]{ 8235 } }, - { 2962u, new int[]{ 9652 } }, - { 2964u, new int[]{ 9644 } }, - { 2966u, new int[]{ -1023 } }, - { 2967u, new int[]{ -1042 } }, - { 2968u, new int[]{ 9511 } }, - { 2970u, new int[]{ -1011 } }, - { 2971u, new int[]{ -1000 } }, - { 2972u, new int[]{ -1013 } }, - { 2973u, new int[]{ -1010 } }, - { 2997u, new int[]{ -652 } }, - { 2998u, new int[]{ -583 } }, - { 2999u, new int[]{ -1009 } }, - { 3004u, new int[]{ -1016 } }, - { 3014u, new int[]{ -1018 } }, - { 3015u, new int[]{ -1019 } }, - { 3017u, new int[]{ 9417 } }, - { 3019u, new int[]{ -1008 } }, - { 3020u, new int[]{ -1012 } }, - { 3021u, new int[]{ 9707 } }, - { 3022u, new int[]{ -1031 } }, - { 3023u, new int[]{ 9769 } }, - { 3024u, new int[]{ -1038 } }, - { 3025u, new int[]{ -1006 } }, - { 3026u, new int[]{ -997 } }, - { 3027u, new int[]{ 9853 } }, - { 3029u, new int[]{ -1001 } }, - { 3030u, new int[]{ -1015 } }, - { 3041u, new int[]{ 5671 } }, - { 3048u, new int[]{ -1033 } }, - { 3053u, new int[]{ -1060 } }, - { 3054u, new int[]{ 9741 } }, - { 3056u, new int[]{ 9953, 9953 } }, - { 3057u, new int[]{ 9832 } }, - { 3058u, new int[]{ 9908 } }, - { 3059u, new int[]{ 9819 } }, - { 3060u, new int[]{ 9818 } }, - { 3061u, new int[]{ -1061 } }, - { 3062u, new int[]{ -1025 } }, - { 3063u, new int[]{ 10077 } }, - { 3064u, new int[]{ -1030 } }, - { 3065u, new int[]{ -1030 } }, - { 3066u, new int[]{ 9714 } }, - { 3067u, new int[]{ 9720 } }, - { 3068u, new int[]{ 9722 } }, - { 3069u, new int[]{ 9726 } }, - { 3070u, new int[]{ -1027 } }, - { 3071u, new int[]{ -1043 } }, - { 3072u, new int[]{ -1045 } }, - { 3073u, new int[]{ -1044 } }, - { 3074u, new int[]{ -1020 } }, - { 3075u, new int[]{ -1021 } }, - { 3076u, new int[]{ -1051 } }, - { 3077u, new int[]{ -1052 } }, - { 3078u, new int[]{ -1053 } }, - { 3079u, new int[]{ -1054 } }, - { 3081u, new int[]{ 10075 } }, - { 3082u, new int[]{ -1064 } }, - { 3083u, new int[]{ 10037 } }, - { 3084u, new int[]{ -1059 } }, - { 3087u, new int[]{ -1032 } }, - { 3089u, new int[]{ -1057 } }, - { 3090u, new int[]{ -1055 } }, - { 3091u, new int[]{ -1046 } }, - { 3092u, new int[]{ -1028 } }, - { 3093u, new int[]{ -1029 } }, - { 3094u, new int[]{ -1036 } }, - { 3095u, new int[]{ -1039 } }, - { 3096u, new int[]{ -1039 } }, - { 3097u, new int[]{ -1040 } }, - { 3098u, new int[]{ -1041 } }, - { 3112u, new int[]{ -1062 } }, - { 3113u, new int[]{ -1063 } }, - { 3114u, new int[]{ -1063 } }, - { 3116u, new int[]{ -1024 } }, - { 3117u, new int[]{ -1026 } }, - { 3118u, new int[]{ -1035 } }, - { 3119u, new int[]{ -1034 } }, - { 3121u, new int[]{ 9949 } }, - { 3125u, new int[]{ 10041 } }, - { 3126u, new int[]{ -1037 } }, - { 3127u, new int[]{ 9948 } }, - { 3128u, new int[]{ 9931 } }, - { 3129u, new int[]{ 10004 } }, - { 3130u, new int[]{ 9989 } }, - { 3131u, new int[]{ 9988 } }, - { 3132u, new int[]{ 9955 } }, - { 3133u, new int[]{ 9945 } }, - { 3134u, new int[]{ -1072 } }, - { 3143u, new int[]{ 9963 } }, - { 3144u, new int[]{ 10192 } }, - { 3150u, new int[]{ 9813 } }, - { 3151u, new int[]{ 9813 } }, - { 3156u, new int[]{ -1022 } }, - { 3161u, new int[]{ 9939 } }, - { 3170u, new int[]{ -1056 } }, - { 3177u, new int[]{ -1048 } }, - { 3178u, new int[]{ -1047 } }, - { 3179u, new int[]{ 9920 } }, - { 3180u, new int[]{ -1080 } }, - { 3181u, new int[]{ -1067 } }, - { 3184u, new int[]{ 9973 } }, - { 3185u, new int[]{ 9940 } }, - { 3186u, new int[]{ 9984 } }, - { 3187u, new int[]{ 9983 } }, - { 3188u, new int[]{ 9985 } }, - { 3192u, new int[]{ -1071 } }, - { 3195u, new int[]{ -1075 } }, - { 3197u, new int[]{ -1076 } }, - { 3204u, new int[]{ -1077 } }, - { 3206u, new int[]{ 9693 } }, - { 3207u, new int[]{ 9930 } }, - { 3242u, new int[]{ -1070 } }, - { 3243u, new int[]{ -1083 } }, - { 3244u, new int[]{ -1084 } }, - { 3245u, new int[]{ -1066 } }, - { 3246u, new int[]{ -1065 } }, - { 3247u, new int[]{ -1068 } }, - { 3248u, new int[]{ -1078 } }, - { 3256u, new int[]{ -1081 } }, - { 3257u, new int[]{ -1082 } }, - { 3266u, new int[]{ 10064 } }, - { 3274u, new int[]{ 9958 } }, - { 3275u, new int[]{ 10006 } }, - { 3292u, new int[]{ -1069 } }, - { 3294u, new int[]{ 7667 } }, - { 3295u, new int[]{ -1079 } }, - { 3297u, new int[]{ 9941 } }, - { 3298u, new int[]{ 10242 } }, - { 3316u, new int[]{ -1050 } }, - { 3326u, new int[]{ -1049 } }, - { 3572u, new int[]{ 2136 } }, - }; -} -// @formatter:on diff --git a/Glamourer.GameData/RestrictedGear.cs b/Glamourer.GameData/RestrictedGear.cs deleted file mode 100644 index 69cc8f2..0000000 --- a/Glamourer.GameData/RestrictedGear.cs +++ /dev/null @@ -1,437 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using Dalamud.Data; -using Dalamud.Logging; -using Dalamud.Utility; -using Lumina.Excel; -using Lumina.Excel.GeneratedSheets; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using Race = Penumbra.GameData.Enums.Race; - -namespace Glamourer; - -// Handle gender- or race-locked gear in the draw model itself. -// Racial gear gets swapped to the correct current race and gender (it is one set each). -// Gender-locked gear gets swapped to the equivalent set if it exists (most of them do), -// with some items getting send to emperor's new clothes and a few funny entries. -public class RestrictedGear -{ - private readonly ExcelSheet _items; - private readonly ExcelSheet _categories; - - private readonly HashSet _raceGenderSet = RaceGenderGroup.Where(c => c != 0).ToHashSet(); - private readonly Dictionary _maleToFemale = new(); - private readonly Dictionary _femaleToMale = new(); - - internal RestrictedGear(DataManager gameData) - { - _items = gameData.GetExcelSheet()!; - _categories = gameData.GetExcelSheet()!; - AddKnown(); - UnhandledRestrictedGear(true); // Set this to true to create a print of unassigned gear on launch. - } - - // Resolve a model given by its model id, variant and slot for your current race and gender. - public (bool Replaced, CharacterArmor Armor) ResolveRestricted(CharacterArmor armor, EquipSlot slot, Race race, Gender gender) - { - var quad = armor.Set.Value | ((uint)armor.Variant << 16); - // Check racial gear, this does not need slots. - if (RaceGenderGroup.Contains(quad)) - { - var idx = ((int)race - 1) * 2 + (gender is Gender.Female or Gender.FemaleNpc ? 1 : 0); - var value = RaceGenderGroup[idx]; - return (value != quad, new CharacterArmor((ushort)value, (byte)(value >> 16), armor.Stain)); - } - - // Check gender slots. If current gender is female, check if anything needs to be changed from male to female, - // and vice versa. - // Some items lead to the exact same model- and variant id just gender specified, - // so check for actual difference in the Replaced bool. - var needle = quad | ((uint)slot.ToSlot() << 24); - if (gender is Gender.Female or Gender.FemaleNpc && _maleToFemale.TryGetValue(needle, out var newValue) - || gender is Gender.Male or Gender.MaleNpc && _femaleToMale.TryGetValue(needle, out newValue)) - return (quad != newValue, new CharacterArmor((ushort)newValue, (byte)(newValue >> 16), armor.Stain)); - - // The gear is not restricted. - return (false, armor); - } - - // Add all unknown restricted gear and pair it with emperor's new gear on start up. - // Can also print unhandled items. - public void UnhandledRestrictedGear(bool print = false) - { - if (print) - PluginLog.Information("#### MALE ONLY ######"); - - void AddEmperor(Item item, bool male, bool female) - { - var slot = ((EquipSlot)item.EquipSlotCategory.Row).ToSlot(); - var emperor = slot switch - { - EquipSlot.Head => 10032u, - EquipSlot.Body => 10033u, - EquipSlot.Hands => 10034u, - EquipSlot.Legs => 10035u, - EquipSlot.Feet => 10036u, - EquipSlot.Ears => 09293u, - EquipSlot.Neck => 09292u, - EquipSlot.Wrists => 09294u, - EquipSlot.RFinger => 09295u, - EquipSlot.LFinger => 09295u, - _ => 0u, - }; - if (emperor == 0) - return; - - if (male) - AddItem(item.RowId, emperor, true, false); - if (female) - AddItem(emperor, item.RowId, false, true); - } - - var unhandled = 0; - foreach (var item in _items.Where(i => i.EquipRestriction == 2)) - { - if (_maleToFemale.ContainsKey((uint)item.ModelMain | ((uint)((EquipSlot)item.EquipSlotCategory.Row).ToSlot() << 24))) - continue; - - ++unhandled; - AddEmperor(item, true, false); - - if (print) - PluginLog.Information($"{item.RowId:D5} {item.Name.ToDalamudString().TextValue}"); - } - - if (print) - PluginLog.Information("#### FEMALE ONLY ####"); - foreach (var item in _items.Where(i => i.EquipRestriction == 3)) - { - if (_femaleToMale.ContainsKey((uint)item.ModelMain | ((uint)((EquipSlot)item.EquipSlotCategory.Row).ToSlot() << 24))) - continue; - - ++unhandled; - AddEmperor(item, false, true); - - if (print) - PluginLog.Information($"{item.RowId:D5} {item.Name.ToDalamudString().TextValue}"); - } - - if (print) - PluginLog.Information("#### OTHER #########"); - - foreach (var item in _items.Where(i => i.EquipRestriction > 3)) - { - if (_raceGenderSet.Contains((uint)item.ModelMain)) - continue; - - ++unhandled; - if (print) - PluginLog.Information( - $"{item.RowId:D5} {item.Name.ToDalamudString().TextValue} RestrictionGroup {_categories.GetRow(item.EquipRestriction)!.RowId:D2}"); - } - - if (unhandled > 0) - PluginLog.Warning("There were {Num} restricted items not handled and directed to Emperor's New Set.", unhandled); - } - - // Add a item redirection by its item - NOT MODEL - id. - // This uses the items model as well as its slot. - // Creates a <-> redirection by default but can add -> or <- redirections by setting the corresponding bools to false. - // Prints warnings if anything does not make sense. - private void AddItem(uint itemIdMale, uint itemIdFemale, bool addMale = true, bool addFemale = true) - { - if (!addMale && !addFemale) - return; - - var mItem = _items.GetRow(itemIdMale); - var fItem = _items.GetRow(itemIdFemale); - if (mItem == null || fItem == null) - { - PluginLog.Warning($"Could not add item {itemIdMale} or {itemIdFemale} to restricted items."); - return; - } - - if (mItem.EquipRestriction != 2 && addMale) - { - PluginLog.Warning($"{mItem.Name.ToDalamudString().TextValue} is not restricted anymore."); - return; - } - - if (fItem.EquipRestriction != 3 && addFemale) - { - PluginLog.Warning($"{fItem.Name.ToDalamudString().TextValue} is not restricted anymore."); - return; - } - - var mSlot = ((EquipSlot)mItem.EquipSlotCategory.Row).ToSlot(); - var fSlot = ((EquipSlot)fItem.EquipSlotCategory.Row).ToSlot(); - if (!mSlot.IsAccessory() && !mSlot.IsEquipment()) - { - PluginLog.Warning($"{mItem.Name.ToDalamudString().TextValue} is not equippable to a known slot."); - return; - } - - if (mSlot != fSlot) - { - PluginLog.Warning($"{mItem.Name.ToDalamudString().TextValue} and {fItem.Name.ToDalamudString().TextValue} are not compatible."); - return; - } - - var mModelIdSlot = (uint)mItem.ModelMain | ((uint)mSlot << 24); - var fModelIdSlot = (uint)fItem.ModelMain | ((uint)fSlot << 24); - - if (addMale) - _maleToFemale.TryAdd(mModelIdSlot, fModelIdSlot); - if (addFemale) - _femaleToMale.TryAdd(fModelIdSlot, mModelIdSlot); - } - - // @formatter:off - // Add all currently existing and known gender restricted items. - private void AddKnown() - { - AddItem(02967, 02970); // Lord's Yukata (Blue) <-> Lady's Yukata (Red) - AddItem(02968, 02971); // Lord's Yukata (Green) <-> Lady's Yukata (Blue) - AddItem(02969, 02972); // Lord's Yukata (Grey) <-> Lady's Yukata (Black) - AddItem(02973, 02978); // Red Summer Top <-> Red Summer Halter - AddItem(02974, 02979); // Green Summer Top <-> Green Summer Halter - AddItem(02975, 02980); // Blue Summer Top <-> Blue Summer Halter - AddItem(02976, 02981); // Solar Summer Top <-> Solar Summer Halter - AddItem(02977, 02982); // Lunar Summer Top <-> Lunar Summer Halter - AddItem(02996, 02997); // Hempen Undershirt <-> Hempen Camise - AddItem(03280, 03283); // Lord's Drawers (Black) <-> Lady's Knickers (Black) - AddItem(03281, 03284); // Lord's Drawers (White) <-> Lady's Knickers (White) - AddItem(03282, 03285); // Lord's Drawers (Gold) <-> Lady's Knickers (Gold) - AddItem(03286, 03291); // Red Summer Trunks <-> Red Summer Tanga - AddItem(03287, 03292); // Green Summer Trunks <-> Green Summer Tanga - AddItem(03288, 03293); // Blue Summer Trunks <-> Blue Summer Tanga - AddItem(03289, 03294); // Solar Summer Trunks <-> Solar Summer Tanga - AddItem(03290, 03295); // Lunar Summer Trunks <-> Lunar Summer Tanga - AddItem(03307, 03308); // Hempen Underpants <-> Hempen Pantalettes - AddItem(03748, 03749); // Lord's Clogs <-> Lady's Clogs - AddItem(06045, 06041); // Bohemian's Coat <-> Guardian Corps Coat - AddItem(06046, 06042); // Bohemian's Gloves <-> Guardian Corps Gauntlets - AddItem(06047, 06043); // Bohemian's Trousers <-> Guardian Corps Skirt - AddItem(06048, 06044); // Bohemian's Boots <-> Guardian Corps Boots - AddItem(06094, 06098); // Summer Evening Top <-> Summer Morning Halter - AddItem(06095, 06099); // Summer Evening Trunks <-> Summer Morning Tanga - AddItem(06096, 06100); // Striped Summer Top <-> Striped Summer Halter - AddItem(06097, 06101); // Striped Summer Trunks <-> Striped Summer Tanga - AddItem(06102, 06104); // Black Summer Top <-> Black Summer Halter - AddItem(06103, 06105); // Black Summer Trunks <-> Black Summer Tanga - AddItem(06972, 06973); // Valentione Apron <-> Valentione Apron Dress - AddItem(06975, 06976); // Valentione Trousers <-> Valentione Skirt - AddItem(08532, 08535); // Lord's Yukata (Blackflame) <-> Lady's Yukata (Redfly) - AddItem(08533, 08536); // Lord's Yukata (Whiteflame) <-> Lady's Yukata (Bluefly) - AddItem(08534, 08537); // Lord's Yukata (Blueflame) <-> Lady's Yukata (Pinkfly) - AddItem(08542, 08549); // Ti Leaf Lei <-> Coronal Summer Halter - AddItem(08543, 08550); // Red Summer Maro <-> Red Summer Pareo - AddItem(08544, 08551); // South Seas Talisman <-> Sea Breeze Summer Halter - AddItem(08545, 08552); // Blue Summer Maro <-> Sea Breeze Summer Pareo - AddItem(08546, 08553); // Coeurl Talisman <-> Coeurl Beach Halter - AddItem(08547, 08554); // Coeurl Beach Maro <-> Coeurl Beach Pareo - AddItem(08548, 08555); // Coeurl Beach Briefs <-> Coeurl Beach Tanga - AddItem(10316, 10317); // Southern Seas Vest <-> Southern Seas Swimsuit - AddItem(10318, 10319); // Southern Seas Trunks <-> Southern Seas Tanga - AddItem(10320, 10321); // Striped Southern Seas Vest <-> Striped Southern Seas Swimsuit - AddItem(13298, 13567); // Black-feathered Flat Hat <-> Red-feathered Flat Hat - AddItem(13300, 13639); // Lord's Suikan <-> Lady's Suikan - AddItem(13724, 13725); // Little Lord's Clogs <-> Little Lady's Clogs - AddItem(14854, 14857); // Eastern Lord's Togi <-> Eastern Lady's Togi - AddItem(14855, 14858); // Eastern Lord's Trousers <-> Eastern Lady's Loincloth - AddItem(14856, 14859); // Eastern Lord's Crakows <-> Eastern Lady's Crakows - AddItem(15639, 15642); // Far Eastern Patriarch's Hat <-> Far Eastern Matriarch's Sun Hat - AddItem(15640, 15643); // Far Eastern Patriarch's Tunic <-> Far Eastern Matriarch's Dress - AddItem(15641, 15644); // Far Eastern Patriarch's Longboots <-> Far Eastern Matriarch's Boots - AddItem(15922, 15925); // Moonfire Vest <-> Moonfire Halter - AddItem(15923, 15926); // Moonfire Trunks <-> Moonfire Tanga - AddItem(15924, 15927); // Moonfire Caligae <-> Moonfire Sandals - AddItem(16106, 16111); // Makai Mauler's Facemask <-> Makai Manhandler's Facemask - AddItem(16107, 16112); // Makai Mauler's Oilskin <-> Makai Manhandler's Jerkin - AddItem(16108, 16113); // Makai Mauler's Fingerless Gloves <-> Makai Manhandler's Fingerless Gloves - AddItem(16109, 16114); // Makai Mauler's Leggings <-> Makai Manhandler's Quartertights - AddItem(16110, 16115); // Makai Mauler's Boots <-> Makai Manhandler's Longboots - AddItem(16116, 16121); // Makai Marksman's Eyepatch <-> Makai Markswoman's Ribbon - AddItem(16117, 16122); // Makai Marksman's Battlegarb <-> Makai Markswoman's Battledress - AddItem(16118, 16123); // Makai Marksman's Fingerless Gloves <-> Makai Markswoman's Fingerless Gloves - AddItem(16119, 16124); // Makai Marksman's Slops <-> Makai Markswoman's Quartertights - AddItem(16120, 16125); // Makai Marksman's Boots <-> Makai Markswoman's Longboots - AddItem(16126, 16131); // Makai Sun Guide's Circlet <-> Makai Moon Guide's Circlet - AddItem(16127, 16132); // Makai Sun Guide's Oilskin <-> Makai Moon Guide's Gown - AddItem(16128, 16133); // Makai Sun Guide's Fingerless Gloves <-> Makai Moon Guide's Fingerless Gloves - AddItem(16129, 16134); // Makai Sun Guide's Slops <-> Makai Moon Guide's Quartertights - AddItem(16130, 16135); // Makai Sun Guide's Boots <-> Makai Moon Guide's Longboots - AddItem(16136, 16141); // Makai Priest's Coronet <-> Makai Priestess's Headdress - AddItem(16137, 16142); // Makai Priest's Doublet Robe <-> Makai Priestess's Jerkin - AddItem(16138, 16143); // Makai Priest's Fingerless Gloves <-> Makai Priestess's Fingerless Gloves - AddItem(16139, 16144); // Makai Priest's Slops <-> Makai Priestess's Skirt - AddItem(16140, 16145); // Makai Priest's Boots <-> Makai Priestess's Longboots - AddItem(16588, 16592); // Far Eastern Gentleman's Hat <-> Far Eastern Beauty's Hairpin - AddItem(16589, 16593); // Far Eastern Gentleman's Robe <-> Far Eastern Beauty's Robe - AddItem(16590, 16594); // Far Eastern Gentleman's Haidate <-> Far Eastern Beauty's Koshita - AddItem(16591, 16595); // Far Eastern Gentleman's Boots <-> Far Eastern Beauty's Boots - AddItem(17204, 17209); // Common Makai Mauler's Facemask <-> Common Makai Manhandler's Facemask - AddItem(17205, 17210); // Common Makai Mauler's Oilskin <-> Common Makai Manhandler's Jerkin - AddItem(17206, 17211); // Common Makai Mauler's Fingerless Gloves <-> Common Makai Manhandler's Fingerless Glove - AddItem(17207, 17212); // Common Makai Mauler's Leggings <-> Common Makai Manhandler's Quartertights - AddItem(17208, 17213); // Common Makai Mauler's Boots <-> Common Makai Manhandler's Longboots - AddItem(17214, 17219); // Common Makai Marksman's Eyepatch <-> Common Makai Markswoman's Ribbon - AddItem(17215, 17220); // Common Makai Marksman's Battlegarb <-> Common Makai Markswoman's Battledress - AddItem(17216, 17221); // Common Makai Marksman's Fingerless Gloves <-> Common Makai Markswoman's Fingerless Glove - AddItem(17217, 17222); // Common Makai Marksman's Slops <-> Common Makai Markswoman's Quartertights - AddItem(17218, 17223); // Common Makai Marksman's Boots <-> Common Makai Markswoman's Longboots - AddItem(17224, 17229); // Common Makai Sun Guide's Circlet <-> Common Makai Moon Guide's Circlet - AddItem(17225, 17230); // Common Makai Sun Guide's Oilskin <-> Common Makai Moon Guide's Gown - AddItem(17226, 17231); // Common Makai Sun Guide's Fingerless Gloves <-> Common Makai Moon Guide's Fingerless Glove - AddItem(17227, 17232); // Common Makai Sun Guide's Slops <-> Common Makai Moon Guide's Quartertights - AddItem(17228, 17233); // Common Makai Sun Guide's Boots <-> Common Makai Moon Guide's Longboots - AddItem(17234, 17239); // Common Makai Priest's Coronet <-> Common Makai Priestess's Headdress - AddItem(17235, 17240); // Common Makai Priest's Doublet Robe <-> Common Makai Priestess's Jerkin - AddItem(17236, 17241); // Common Makai Priest's Fingerless Gloves <-> Common Makai Priestess's Fingerless Gloves - AddItem(17237, 17242); // Common Makai Priest's Slops <-> Common Makai Priestess's Skirt - AddItem(17238, 17243); // Common Makai Priest's Boots <-> Common Makai Priestess's Longboots - AddItem(17481, 17476); // Royal Seneschal's Chapeau <-> Songbird Hat - AddItem(17482, 17477); // Royal Seneschal's Coat <-> Songbird Jacket - AddItem(17483, 17478); // Royal Seneschal's Fingerless Gloves <-> Songbird Gloves - AddItem(17484, 17479); // Royal Seneschal's Breeches <-> Songbird Skirt - AddItem(17485, 17480); // Royal Seneschal's Boots <-> Songbird Boots - AddItem(20479, 20484); // Star of the Nezha Lord <-> Star of the Nezha Lady - AddItem(20480, 20485); // Nezha Lord's Togi <-> Nezha Lady's Togi - AddItem(20481, 20486); // Nezha Lord's Gloves <-> Nezha Lady's Gloves - AddItem(20482, 20487); // Nezha Lord's Slops <-> Nezha Lady's Slops - AddItem(20483, 20488); // Nezha Lord's Boots <-> Nezha Lady's Kneeboots - AddItem(22367, 22372); // Faerie Tale Prince's Circlet <-> Faerie Tale Princess's Tiara - AddItem(22368, 22373); // Faerie Tale Prince's Vest <-> Faerie Tale Princess's Dress - AddItem(22369, 22374); // Faerie Tale Prince's Gloves <-> Faerie Tale Princess's Gloves - AddItem(22370, 22375); // Faerie Tale Prince's Slops <-> Faerie Tale Princess's Long Skirt - AddItem(22371, 22376); // Faerie Tale Prince's Boots <-> Faerie Tale Princess's Heels - AddItem(24599, 24602); // Far Eastern Schoolboy's Hat <-> Far Eastern Schoolgirl's Hair Ribbon - AddItem(24600, 24603); // Far Eastern Schoolboy's Hakama <-> Far Eastern Schoolgirl's Hakama - AddItem(24601, 24604); // Far Eastern Schoolboy's Zori <-> Far Eastern Schoolgirl's Boots - AddItem(28558, 28573); // Valentione Rose Hat <-> Valentione Rose Ribboned Hat - AddItem(28559, 28574); // Valentione Rose Waistcoat <-> Valentione Rose Dress - AddItem(28560, 28575); // Valentione Rose Gloves <-> Valentione Rose Ribboned Gloves - AddItem(28561, 28576); // Valentione Rose Slacks <-> Valentione Rose Tights - AddItem(28562, 28577); // Valentione Rose Shoes <-> Valentione Rose Heels - AddItem(28563, 28578); // Valentione Forget-me-not Hat <-> Valentione Forget-me-not Ribboned Hat - AddItem(28564, 28579); // Valentione Forget-me-not Waistcoat <-> Valentione Forget-me-not Dress - AddItem(28565, 28580); // Valentione Forget-me-not Gloves <-> Valentione Forget-me-not Ribboned Gloves - AddItem(28566, 28581); // Valentione Forget-me-not Slacks <-> Valentione Forget-me-not Tights - AddItem(28567, 28582); // Valentione Forget-me-not Shoes <-> Valentione Forget-me-not Heels - AddItem(28568, 28583); // Valentione Acacia Hat <-> Valentione Acacia Ribboned Hat - AddItem(28569, 28584); // Valentione Acacia Waistcoat <-> Valentione Acacia Dress - AddItem(28570, 28585); // Valentione Acacia Gloves <-> Valentione Acacia Ribboned Gloves - AddItem(28571, 28586); // Valentione Acacia Slacks <-> Valentione Acacia Tights - AddItem(28572, 28587); // Valentione Acacia Shoes <-> Valentione Acacia Heels - AddItem(28600, 28605); // Eastern Lord Errant's Hat <-> Eastern Lady Errant's Hat - AddItem(28601, 28606); // Eastern Lord Errant's Jacket <-> Eastern Lady Errant's Coat - AddItem(28602, 28607); // Eastern Lord Errant's Wristbands <-> Eastern Lady Errant's Gloves - AddItem(28603, 28608); // Eastern Lord Errant's Trousers <-> Eastern Lady Errant's Skirt - AddItem(28604, 28609); // Eastern Lord Errant's Shoes <-> Eastern Lady Errant's Boots - AddItem(31408, 31413); // Bergsteiger's Hat <-> Dirndl's Hat - AddItem(31409, 31414); // Bergsteiger's Jacket <-> Dirndl's Bodice - AddItem(31410, 31415); // Bergsteiger's Halfgloves <-> Dirndl's Wrist Torque - AddItem(31411, 31416); // Bergsteiger's Halfslops <-> Dirndl's Long Skirt - AddItem(31412, 31417); // Bergsteiger's Boots <-> Dirndl's Pumps - AddItem(36336, 36337); // Omega-M Attire <-> Omega-F Attire - AddItem(36338, 36339); // Omega-M Ear Cuffs <-> Omega-F Earrings - AddItem(37442, 37447); // Makai Vanguard's Monocle <-> Makai Vanbreaker's Ribbon - AddItem(37443, 37448); // Makai Vanguard's Battlegarb <-> Makai Vanbreaker's Battledress - AddItem(37444, 37449); // Makai Vanguard's Fingerless Gloves <-> Makai Vanbreaker's Fingerless Gloves - AddItem(37445, 37450); // Makai Vanguard's Leggings <-> Makai Vanbreaker's Quartertights - AddItem(37446, 37451); // Makai Vanguard's Boots <-> Makai Vanbreaker's Longboots - AddItem(37452, 37457); // Makai Harbinger's Facemask <-> Makai Harrower's Facemask - AddItem(37453, 37458); // Makai Harbinger's Battlegarb <-> Makai Harrower's Jerkin - AddItem(37454, 37459); // Makai Harbinger's Fingerless Gloves <-> Makai Harrower's Fingerless Gloves - AddItem(37455, 37460); // Makai Harbinger's Leggings <-> Makai Harrower's Quartertights - AddItem(37456, 37461); // Makai Harbinger's Boots <-> Makai Harrower's Longboots - AddItem(37462, 37467); // Common Makai Vanguard's Monocle <-> Common Makai Vanbreaker's Ribbon - AddItem(37463, 37468); // Common Makai Vanguard's Battlegarb <-> Common Makai Vanbreaker's Battledress - AddItem(37464, 37469); // Common Makai Vanguard's Fingerless Gloves <-> Common Makai Vanbreaker's Fingerless Gloves - AddItem(37465, 37470); // Common Makai Vanguard's Leggings <-> Common Makai Vanbreaker's Quartertights - AddItem(37466, 37471); // Common Makai Vanguard's Boots <-> Common Makai Vanbreaker's Longboots - AddItem(37472, 37477); // Common Makai Harbinger's Facemask <-> Common Makai Harrower's Facemask - AddItem(37473, 37478); // Common Makai Harbinger's Battlegarb <-> Common Makai Harrower's Jerkin - AddItem(37474, 37479); // Common Makai Harbinger's Fingerless Gloves <-> Common Makai Harrower's Fingerless Gloves - AddItem(37475, 37480); // Common Makai Harbinger's Leggings <-> Common Makai Harrower's Quartertights - AddItem(37476, 37481); // Common Makai Harbinger's Boots <-> Common Makai Harrower's Longboots - AddItem(13323, 13322); // Scion Thief's Tunic <-> Scion Conjurer's Dalmatica - AddItem(13693, 10034, true, false); // Scion Thief's Halfgloves -> The Emperor's New Gloves - AddItem(13694, 13691); // Scion Thief's Gaskins <-> Scion Conjurer's Chausses - AddItem(13695, 13692); // Scion Thief's Armored Caligae <-> Scion Conjurer's Pattens - AddItem(13326, 30063); // Scion Thaumaturge's Robe <-> Scion Sorceress's Headdress - AddItem(13696, 30062); // Scion Thaumaturge's Monocle <-> Scion Sorceress's Robe - AddItem(13697, 30064); // Scion Thaumaturge's Gauntlets <-> Scion Sorceress's Shadowtalons - AddItem(13698, 10035, true, false); // Scion Thaumaturge's Gaskins -> The Emperor's New Breeches - AddItem(13699, 30065); // Scion Thaumaturge's Moccasins <-> Scion Sorceress's High Boots - AddItem(13327, 15942); // Scion Chronocler's Cowl <-> Scion Healer's Robe - AddItem(13700, 10034, true, false); // Scion Chronocler's Ringbands -> The Emperor's New Gloves - AddItem(13701, 15943); // Scion Chronocler's Tights <-> Scion Healer's Halftights - AddItem(13702, 15944); // Scion Chronocler's Caligae <-> Scion Healer's Highboots - AddItem(14861, 13324); // Head Engineer's Goggles <-> Scion Striker's Visor - AddItem(14862, 13325); // Head Engineer's Attire <-> Scion Striker's Attire - AddItem(15938, 33751); // Scion Rogue's Jacket <-> Oracle Top - AddItem(15939, 10034, true, false); // Scion Rogue's Armguards -> The Emperor's New Gloves - AddItem(15940, 33752); // Scion Rogue's Gaskins <-> Oracle Leggings - AddItem(15941, 33753); // Scion Rogue's Boots <-> Oracle Pantalettes - AddItem(16042, 16046); // Abes Jacket <-> High Summoner's Dress - AddItem(16043, 16047); // Abes Gloves <-> High Summoner's Armlets - AddItem(16044, 10035, true, false); // Abes Halfslops -> The Emperor's New Breeches - AddItem(16045, 16048); // Abes Boots <-> High Summoner's Boots - AddItem(17473, 28553); // Lord Commander's Coat <-> Majestic Dress - AddItem(17474, 28554); // Lord Commander's Gloves <-> Majestic Wristdresses - AddItem(10036, 28555, false); // Emperor's New Boots <- Majestic Boots - AddItem(21021, 21026); // Werewolf Feet <-> Werewolf Legs - AddItem(22452, 20633); // Cracked Manderville Monocle <-> Blackbosom Hat - AddItem(22453, 20634); // Torn Manderville Coatee <-> Blackbosom Dress - AddItem(22454, 20635); // Singed Manderville Gloves <-> Blackbosom Dress Gloves - AddItem(22455, 10035, true, false); // Stained Manderville Bottoms -> The Emperor's New Breeches - AddItem(22456, 20636); // Scuffed Manderville Gaiters <-> lackbosom Boots - AddItem(23013, 21302); // Doman Liege's Dogi <-> Scion Liberator's Jacket - AddItem(23014, 21303); // Doman Liege's Kote <-> Scion Liberator's Fingerless Gloves - AddItem(23015, 21304); // Doman Liege's Kyakui <-> Scion Liberator's Pantalettes - AddItem(23016, 21305); // Doman Liege's Kyahan <-> Scion Liberator's Sabatons - AddItem(09293, 21306, false); // The Emperor's New Earrings <- Scion Liberator's Earrings - AddItem(24158, 23008, true, false); // Leal Samurai's Kasa -> Eastern Socialite's Hat - AddItem(24159, 23009, true, false); // Leal Samurai's Dogi -> Eastern Socialite's Cheongsam - AddItem(24160, 23010, true, false); // Leal Samurai's Tekko -> Eastern Socialite's Gloves - AddItem(24161, 23011, true, false); // Leal Samurai's Tsutsu-hakama -> Eastern Socialite's Skirt - AddItem(24162, 23012, true, false); // Leal Samurai's Geta -> Eastern Socialite's Boots - AddItem(02966, 13321, false); // Reindeer Suit <- Antecedent's Attire - AddItem(15479, 36843, false); // Swine Body <- Lyse's Leadership Attire - AddItem(21941, 24999, false); // Ala Mhigan Gown <- Gown of Light - AddItem(30757, 25000, false); // Southern Seas Skirt <- Skirt of Light - AddItem(36821, 27933, false); // Archfiend Helm <- Scion Hearer's Hood - AddItem(36822, 27934, false); // Archfiend Armor <- Scion Hearer's Coat - AddItem(36825, 27935, false); // Archfiend Sabatons <- Scion Hearer's Shoes - AddItem(38253, 38257); // Valentione Emissary's Hat <-> Valentione Emissary's Dress Hat - AddItem(38254, 38258); // Valentione Emissary's Jacket <-> Valentione Emissary's Ruffled Dress - AddItem(38255, 38259); // Valentione Emissary's Bottoms <-> Valentione Emissary's Culottes - AddItem(38256, 38260); // Valentione Emissary's Boots <-> Valentione Emissary's Boots - } - - // The racial starter sets are available for all 4 slots each, - // but have no associated accessories or hats. - private static readonly uint[] RaceGenderGroup = - { - 0x020054, - 0x020055, - 0x020056, - 0x020057, - 0x02005C, - 0x02005D, - 0x020058, - 0x020059, - 0x02005A, - 0x02005B, - 0x020101, - 0x020102, - 0x010255, - uint.MaxValue, // TODO: Female Hrothgar - 0x0102E8, - 0x010245, - }; - // @Formatter:on -} diff --git a/Glamourer.GameData/Structs/Stain.cs b/Glamourer.GameData/Structs/Stain.cs deleted file mode 100644 index 7a43645..0000000 --- a/Glamourer.GameData/Structs/Stain.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Dalamud.Utility; -using Penumbra.GameData.Structs; - -namespace Glamourer.Structs; - -// A wrapper for the clothing dyes the game provides with their RGBA color value, game ID, unmodified color value and name. -public readonly struct Stain -{ - // An empty stain with transparent color. - public static readonly Stain None = new("None"); - - public readonly string Name; - public readonly uint RgbaColor; - - // Combine the Id byte with the 3 bytes of color values. - private readonly uint _seColorId; - - public byte R - => (byte)(RgbaColor & 0xFF); - - public byte G - => (byte)((RgbaColor >> 8) & 0xFF); - - public byte B - => (byte)((RgbaColor >> 16) & 0xFF); - - public byte Intensity - => (byte)((1 + R + G + B) / 3); - - public uint SeColor - => _seColorId & 0x00FFFFFF; - - public StainId RowIndex - => (StainId)(_seColorId >> 24); - - // R and B need to be shuffled and Alpha set to max. - public static uint SeColorToRgba(uint color) - => ((color & 0xFF) << 16) | ((color >> 16) & 0xFF) | (color & 0xFF00) | 0xFF000000; - - public Stain(byte index, Lumina.Excel.GeneratedSheets.Stain stain) - { - Name = stain.Name.ToDalamudString().ToString(); - _seColorId = stain.Color | ((uint)index << 24); - RgbaColor = SeColorToRgba(stain.Color); - } - - // Only used by None. - private Stain(string name) - { - Name = name; - _seColorId = 0; - RgbaColor = 0; - } -} diff --git a/Glamourer/Dalamud.cs b/Glamourer/Dalamud.cs index d105b8b..4a1b58e 100644 --- a/Glamourer/Dalamud.cs +++ b/Glamourer/Dalamud.cs @@ -21,6 +21,7 @@ public class Dalamud [PluginService][RequiredVersion("1.0")] public static CommandManager Commands { get; private set; } = null!; [PluginService][RequiredVersion("1.0")] public static DataManager GameData { get; private set; } = null!; [PluginService][RequiredVersion("1.0")] public static ClientState ClientState { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static GameGui GameGui { get; private set; } = null!; [PluginService][RequiredVersion("1.0")] public static ChatGui Chat { get; private set; } = null!; [PluginService][RequiredVersion("1.0")] public static Framework Framework { get; private set; } = null!; [PluginService][RequiredVersion("1.0")] public static TargetManager Targets { get; private set; } = null!; diff --git a/Glamourer/Glamourer.cs b/Glamourer/Glamourer.cs index c5c7618..ab810f2 100644 --- a/Glamourer/Glamourer.cs +++ b/Glamourer/Glamourer.cs @@ -36,7 +36,6 @@ public class Glamourer : IDalamudPlugin public static PenumbraAttach Penumbra = null!; public static ICustomizationManager Customization = null!; public static RestrictedGear RestrictedGear = null!; - public static ModelData Models = null!; public static RedrawManager RedrawManager = null!; public readonly FixedDesigns FixedDesigns; public readonly CurrentManipulations CurrentManipulations; @@ -57,14 +56,12 @@ public class Glamourer : IDalamudPlugin Log = new Logger(); Customization = CustomizationManager.Create(Dalamud.PluginInterface, Dalamud.GameData); - RestrictedGear = GameData.RestrictedGear(Dalamud.GameData); - Models = GameData.Models(Dalamud.GameData); Config = GlamourerConfig.Load(); Identifier = global::Penumbra.GameData.GameData.GetIdentifier(Dalamud.PluginInterface, Dalamud.GameData); Penumbra = new PenumbraAttach(Config.AttachToPenumbra); - Actors = new ActorManager(Dalamud.PluginInterface, Dalamud.Objects, Dalamud.ClientState, Dalamud.GameData, + Actors = new ActorManager(Dalamud.PluginInterface, Dalamud.Objects, Dalamud.ClientState, Dalamud.GameData, Dalamud.GameGui, i => (short)Penumbra.CutsceneParent(i)); FixedDesigns = new FixedDesigns(); CurrentManipulations = new CurrentManipulations(); diff --git a/Glamourer/Gui/Equipment/EquipmentDrawer.Main.cs b/Glamourer/Gui/Equipment/EquipmentDrawer.Main.cs index 144c9dd..f434adf 100644 --- a/Glamourer/Gui/Equipment/EquipmentDrawer.Main.cs +++ b/Glamourer/Gui/Equipment/EquipmentDrawer.Main.cs @@ -5,18 +5,21 @@ using Glamourer.Customization; using Glamourer.Interop; using ImGuiNET; using OtterGui.Raii; +using OtterGui.Widgets; +using Penumbra.GameData.Data; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; namespace Glamourer.Gui.Equipment; public enum ApplicationFlags -{ - -} +{ } public partial class EquipmentDrawer { + private static readonly FilterComboColors _stainCombo; + private static readonly StainData _stainData; + private Race _race; private Gender _gender; private CharacterEquip _equip; @@ -28,8 +31,9 @@ public partial class EquipmentDrawer static EquipmentDrawer() { - Stains = GameData.Stains(Dalamud.GameData); - StainCombo = new FilterStainCombo(140); + _stainData = new StainData(Dalamud.PluginInterface, Dalamud.GameData, Dalamud.GameData.Language); + _stainCombo = new FilterComboColors(140, + _stainData.Data.Prepend(new KeyValuePair(0, ("None", 0, false)))); Identifier = Glamourer.Identifier; ItemCombos = EquipSlotExtensions.EqdpSlots.Select(s => new ItemCombo(s)).ToArray(); MainHandCombo = new WeaponCombo(EquipSlot.MainHand); @@ -76,25 +80,31 @@ public partial class EquipmentDrawer d.DrawInternal(ref mainHand, ref offHand, ref flags); } + private void DrawStainCombo() + { + var found = _stainData.TryGetValue(_currentArmor.Stain, out var stain); + _stainCombo.Draw("##stain", stain.RgbaColor, found); + } + private void DrawInternal(ref CharacterWeapon mainHand, ref CharacterWeapon offHand) { foreach (var slot in EquipSlotExtensions.EqdpSlots) { using var id = SetSlot(slot); - DrawStainSelector(); + DrawStainCombo(); ImGui.SameLine(); DrawItemSelector(); } _currentSlot = EquipSlot.MainHand; - DrawStainSelector(); + DrawStainCombo(); ImGui.SameLine(); DrawMainHandSelector(ref mainHand); var offhand = MainHandCombo.LastCategory.AllowsOffHand(); if (offhand != WeaponCategory.Unknown) { _currentSlot = EquipSlot.OffHand; - DrawStainSelector(); + DrawStainCombo(); ImGui.SameLine(); DrawOffHandSelector(ref offHand, offhand); } @@ -107,7 +117,7 @@ public partial class EquipmentDrawer using var id = SetSlot(slot); DrawCheckbox(ref flags); ImGui.SameLine(); - DrawStainSelector(); + DrawStainCombo(); ImGui.SameLine(); DrawItemSelector(); } @@ -115,7 +125,7 @@ public partial class EquipmentDrawer _currentSlot = EquipSlot.MainHand; DrawCheckbox(ref flags); ImGui.SameLine(); - DrawStainSelector(); + DrawStainCombo(); ImGui.SameLine(); DrawMainHandSelector(ref mainHand); var offhand = MainHandCombo.LastCategory.AllowsOffHand(); @@ -124,7 +134,7 @@ public partial class EquipmentDrawer _currentSlot = EquipSlot.OffHand; DrawCheckbox(ref flags); ImGui.SameLine(); - DrawStainSelector(); + DrawStainCombo(); ImGui.SameLine(); DrawOffHandSelector(ref offHand, offhand); } diff --git a/Glamourer/Gui/Equipment/EquipmentDrawer.Misc.cs b/Glamourer/Gui/Equipment/EquipmentDrawer.Misc.cs index a9372cb..a85bcae 100644 --- a/Glamourer/Gui/Equipment/EquipmentDrawer.Misc.cs +++ b/Glamourer/Gui/Equipment/EquipmentDrawer.Misc.cs @@ -1,92 +1,10 @@ -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Dalamud.Interface; -using Glamourer.State; -using ImGuiNET; +using ImGuiNET; using OtterGui; -using OtterGui.Raii; -using OtterGui.Widgets; -using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; -using Stain = Glamourer.Structs.Stain; namespace Glamourer.Gui.Equipment; public partial class EquipmentDrawer { - private static readonly IReadOnlyDictionary Stains; - private static readonly FilterStainCombo StainCombo; - - private sealed class FilterStainCombo : FilterComboBase - { - private readonly float _comboWidth; - private Vector2 _buttonSize; - public ImRaii.Color Color = new(); - - public FilterStainCombo(float comboWidth) - : base(Stains.Values.ToArray(), false) - => _comboWidth = comboWidth; - - protected override float GetFilterWidth() - { - // Hack to not color the filter frame. - Color.Pop(); - return _buttonSize.X + ImGui.GetStyle().ScrollbarSize; - } - - protected override void DrawList(float width, float itemHeight) - { - using var style = ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, Vector2.Zero) - .Push(ImGuiStyleVar.WindowPadding, Vector2.Zero) - .Push(ImGuiStyleVar.FrameRounding, 0); - _buttonSize = new Vector2(_comboWidth * ImGuiHelpers.GlobalScale, 0); - if (ImGui.GetScrollMaxY() > 0) - _buttonSize.X += ImGui.GetStyle().ScrollbarSize; - base.DrawList(width, itemHeight); - } - - protected override string ToString(Stain obj) - => obj.Name; - - protected override bool DrawSelectable(int globalIdx, bool selected) - { - var stain = Items[globalIdx]; - // Push the stain color to type and if it is too bright, turn the text color black. - using var colors = ImRaii.PushColor(ImGuiCol.Button, stain.RgbaColor) - .Push(ImGuiCol.Text, 0xFF101010, stain.Intensity > 127) - .Push(ImGuiCol.Border, 0xFF2020D0, selected); - using var style = ImRaii.PushStyle(ImGuiStyleVar.FrameBorderSize, 2f * ImGuiHelpers.GlobalScale, selected); - return ImGui.Button(stain.Name, _buttonSize); - } - } - - private void DrawStainSelector() - { - var foundIdx = StainCombo.Items.IndexOf(s => s.RowIndex.Equals(_currentArmor.Stain)); - var stain = foundIdx >= 0 ? StainCombo.Items[foundIdx] : default; - StainCombo.Color.Push(ImGuiCol.FrameBg, stain.RgbaColor, foundIdx >= 0); - var change = StainCombo.Draw("##stainSelector", string.Empty, ref foundIdx, ImGui.GetFrameHeight(), ImGui.GetFrameHeight(), - ImGuiComboFlags.NoArrowButton); - StainCombo.Color.Pop(); - if (!change && (byte)_currentArmor.Stain != 0) - { - ImGuiUtil.HoverTooltip($"{stain.Name}\nRight-click to clear."); - if (ImGui.IsItemClicked(ImGuiMouseButton.Right)) - { - change = true; - foundIdx = -1; - } - } - - if (change) - { - _currentArmor = new CharacterArmor(_currentArmor.Set, _currentArmor.Variant, - foundIdx >= 0 ? StainCombo.Items[foundIdx].RowIndex : Stain.None.RowIndex); - UpdateActors(); - } - } - private void DrawCheckbox(ref ApplicationFlags flags) => DrawCheckbox("##checkbox", "Enable writing this slot in this save.", ref flags, 0); diff --git a/Glamourer/Gui/InterfaceInitialization.cs b/Glamourer/Gui/InterfaceInitialization.cs index b4b515b..ca2fa18 100644 --- a/Glamourer/Gui/InterfaceInitialization.cs +++ b/Glamourer/Gui/InterfaceInitialization.cs @@ -5,7 +5,6 @@ using ImGuiNET; using Penumbra.GameData.Enums; using Lumina.Excel.GeneratedSheets; using Item = Glamourer.Structs.Item; -using Stain = Glamourer.Structs.Stain; namespace Glamourer.Gui;