From 92c8b0e5850c69cc590aa1c9224f2098011c5f40 Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Sat, 30 Aug 2025 15:33:11 -0400 Subject: [PATCH] [Constants] Change Race Changes to Race Namespace (#5000) --- common/faction.cpp | 58 +- common/races.cpp | 3779 +++++++++++++-------------- common/races.h | 202 +- world/client.cpp | 40 +- world/clientlist.cpp | 2 +- zone/aa.cpp | 2 +- zone/attack.cpp | 8 +- zone/bot.cpp | 82 +- zone/bot_commands/appearance.cpp | 34 +- zone/bot_commands/bot.cpp | 52 +- zone/client.cpp | 2 +- zone/client_mods.cpp | 160 +- zone/client_packet.cpp | 18 +- zone/client_process.cpp | 2 +- zone/entity.cpp | 4 +- zone/exp.cpp | 14 +- zone/gm_commands/feature.cpp | 6 +- zone/gm_commands/randomfeatures.cpp | 2 +- zone/mob.cpp | 38 +- zone/npc.cpp | 6 +- zone/special_attacks.cpp | 6 +- zone/tradeskills.cpp | 4 +- zone/worldserver.cpp | 2 +- 23 files changed, 2127 insertions(+), 2396 deletions(-) diff --git a/common/faction.cpp b/common/faction.cpp index 29cf45e58..793991593 100644 --- a/common/faction.cpp +++ b/common/faction.cpp @@ -95,12 +95,12 @@ bool IsOfEqualRace(int r1, int r2) } // TODO: add more values switch (r1) { - case DARK_ELF: + case Race::DarkElf: if (r2 == Race::NeriakCitizen) { return true; } break; - case BARBARIAN: + case Race::Barbarian: if (r2 == Race::HalasCitizen) { return true; } @@ -116,49 +116,49 @@ bool IsOfIndiffRace(int r1, int r2) } // TODO: add more values switch (r1) { - case DARK_ELF: - case OGRE: - case TROLL: - if (r2 == OGRE || r2 == TROLL || r2 == DARK_ELF) { + case Race::DarkElf: + case Race::Ogre: + case Race::Troll: + if (r2 == Race::Ogre || r2 == Race::Troll || r2 == Race::DarkElf) { return true; } break; - case HUMAN: - case BARBARIAN: - case HALF_ELF: - case GNOME: - case HALFLING: - case WOOD_ELF: - if (r2 == HUMAN || - r2 == BARBARIAN || - r2 == ERUDITE || - r2 == HALF_ELF || - r2 == GNOME || - r2 == HALFLING || - r2 == DWARF || - r2 == HIGH_ELF || - r2 == WOOD_ELF) { + case Race::Human: + case Race::Barbarian: + case Race::HalfElf: + case Race::Gnome: + case Race::Halfling: + case Race::WoodElf: + if (r2 == Race::Human || + r2 == Race::Barbarian || + r2 == Race::Erudite || + r2 == Race::HalfElf || + r2 == Race::Gnome || + r2 == Race::Halfling || + r2 == Race::Dwarf || + r2 == Race::HighElf || + r2 == Race::WoodElf) { return true; } break; - case ERUDITE: - if (r2 == HUMAN || r2 == HALF_ELF) { + case Race::Erudite: + if (r2 == Race::Human || r2 == Race::HalfElf) { return true; } break; - case DWARF: - if (r2 == HALFLING || r2 == GNOME) { + case Race::Dwarf: + if (r2 == Race::Halfling || r2 == Race::Gnome) { return true; } break; - case HIGH_ELF: - if (r2 == WOOD_ELF) { + case Race::HighElf: + if (r2 == Race::WoodElf) { return true; } break; - case VAHSHIR: + case Race::VahShir: return true; - case IKSAR: + case Race::Iksar: return false; } return false; diff --git a/common/races.cpp b/common/races.cpp index 033d188bf..a01597640 100644 --- a/common/races.cpp +++ b/common/races.cpp @@ -22,1467 +22,1376 @@ const char* GetRaceIDName(uint16 race_id) { switch (race_id) { - // Old Race Labels - //case HUMAN: - // return "Human"; - //case BARBARIAN: - // return "Barbarian"; - //case ERUDITE: - // return "Erudite"; - //case WOOD_ELF: - // return "Wood Elf"; - //case HIGH_ELF: - // return "High Elf"; - //case DARK_ELF: - // return "Dark Elf"; - //case HALF_ELF: - // return "Half Elf"; - //case DWARF: - // return "Dwarf"; - //case TROLL: - // return "Troll"; - //case OGRE: - // return "Ogre"; - //case HALFLING: - // return "Halfling"; - //case GNOME: - // return "Gnome"; - //case IKSAR: - // return "Iksar"; - //case WEREWOLF: - // return "Werewolf"; - //case SKELETON: - // return "Skeleton"; - //case ELEMENTAL: - // return "Elemental"; - //case EYE_OF_ZOMM: - // return "Eye of Zomm"; - //case WOLF_ELEMENTAL: - // return "Wolf Elemental"; - //case IKSAR_SKELETON: - // return "Iksar Skeleton"; - //case VAHSHIR: - // return "Vah Shir"; - //case FROGLOK: - //case FROGLOK2: // "Piranha"? (low-byte issue..) - // return "Froglok"; - //case DRAKKIN: - // return "Drakkin"; - - // RoF2 Race Labels - case Race::Abhorrent: - return "Abhorrent"; - case Race::AirElemental: - case Race::AirElemental2: - return "Air Elemental"; - case Race::AirMephit: - return "Air Mephit"; - case Race::Akhevan: - case Race::Akheva: - return "Akheva"; - case Race::Alaran: - return "Alaran"; - case Race::AlaranGhost: - return "Alaran Ghost"; - case Race::AlaranSentryStone: - return "Alaran Sentry Stone"; - case Race::Alligator: - case Race::Alligator2: - return "Alligator"; - case Race::Denizen: - case Race::Amygdalan: - return "Amygdalan"; - case Race::Aneuk: - return "Aneuk"; - case Race::AnimatedArmor: - return "Animated Armor"; - case Race::AnimatedHand: - return "Animated Hand"; - case Race::AnimatedStatue: - case Race::AnimatedStatue2: - return "Animated Statue"; - case Race::Apexus: - return "Apexus"; - case Race::Arachnid: - return "Arachnid"; - case Race::ArcanistOfHate: - return "Arcanist of Hate"; - case Race::Armadillo: - return "Armadillo"; - case Race::ArmorRack: - return "Armor Rack"; - case Race::Aviak: - case Race::Aviak2: - return "Aviak"; - case Race::AviakPullAlong: - return "Aviak Pull Along"; - case Race::AyonaeRo: - return "Ayonae Ro"; - case Race::Banner: - case Race::Banner2: - case Race::Banner3: - case Race::Banner4: - case Race::Banner5: - case Race::Banner6: - case Race::Banner7: - return "Banner"; - case Race::TenthAnniversaryBanner: - return "10th Anniversary Banner"; - case Race::Banshee: - case Race::Banshee2: - case Race::Banshee3: - return "Banshee"; - case Race::Barbarian: - case Race::HalasCitizen: - return "Barbarian"; - case Race::Barrel: - return "Barrel"; - case Race::UndeadBoat: - return "Barrel Barge Ship"; - case Race::Basilisk: - return "Basilisk"; - case Race::GiantBat: - case Race::Bat: - case Race::Bat2: - return "Bat"; - case Race::Bazu: - return "Bazu"; - case Race::Bear: - case Race::Bear2: - case Race::Bear3: - return "Bear"; - case Race::BearMount: - return "Bear Mount"; - case Race::BearTrap: - return "Bear Trap"; - case Race::Beetle: - case Race::Beetle2: - case Race::Beetle3: - return "Beetle"; - case Race::HumanBeggar: - return "Beggar"; - case Race::Bellikos: - return "Bellikos"; - case Race::Bertoxxulous: - case Race::BertoxxulousNew: - return "Bertoxxulous"; - case Race::Bixie: - case Race::Bixie2: - return "Bixie"; - case Race::BlimpShip: - return "Blimp Ship"; - case Race::BlindDreamer: - return "Blind Dreamer"; - case Race::BloodRaven: - return "Blood Raven"; - case Race::Boat: - case Race::Boat2: - return "Boat"; - case Race::Bolvirk: - return "Bolvirk"; - case Race::BoneGolem: - case Race::BoneGolem2: - return "Bone Golem"; - case Race::Bones: - return "Bones"; - case Race::BookDervish: - return "Book Dervish"; - case Race::Portal: - return "BoT Portal"; - case Race::Boulder: - return "Boulder"; - case Race::Box: - return "Box"; - case Race::Braxi: - return "Braxi"; - case Race::BraxiMount: - return "Braxi Mount"; - case Race::Brell: - return "Brell"; - case Race::BrellsFirstCreation: - return "Brell's First Creation"; - case Race::Bristlebane: - return "Bristlebane"; - case Race::BrokenClockwork: - return "Broken Clockwork"; - case Race::Brontotherium: - return "Brontotherium"; - case Race::Brownie: - case Race::Brownie2: - return "Brownie"; - case Race::Bubonian: - return "Bubonian"; - case Race::BubonianUnderling: - return "Bubonian Underling"; - case Race::Burynai: - case Race::Burynai2: - return "Burynai"; - case Race::TenthAnniversaryCake: - return "10th Anniversary Cake"; - case Race::Campfire: - return "Campfire"; - case Race::CarrierHand: - return "Carrier Hand"; - case Race::Cat: - return "Cat"; - case Race::CazicThule: - case Race::CazicThule2: - return "Cazic Thule"; - case Race::Centaur: - case Race::Centaur2: - return "Centaur"; - case Race::Chest: - case Race::Chest2: - case Race::Chest3: - return "Chest"; - case Race::Chimera: - case Race::Chimera2: - return "Chimera"; - case Race::Chokidai: - return "Chokidai"; - case Race::Clam: - return "Clam"; - case Race::CliknarMount: - return "Cliknar Mount"; - case Race::CliknarQueen: - return "Cliknar Queen"; - case Race::CliknarSoldier: - return "Cliknar Soldier"; - case Race::CliknarWorker: - return "Cliknar Worker"; - case Race::ClockworkBeetle: - return "Clockwork Beetle"; - case Race::ClockworkBoar: - return "Clockwork Boar"; - case Race::ClockworkBomb: - return "Clockwork Bomb"; - case Race::ClockworkBrain: - return "Clockwork Brain"; - case Race::ClockworkGnome: - return "Clockwork Gnome"; - case Race::ClockworkGolem: - return "Clockwork Golem"; - case Race::ClockworkGuardian: - return "Clockwork Guardian"; - case Race::Cockatrice: - return "Cockatrice"; - case Race::Coffin: - case Race::Coffin2: - return "Coffin"; - case Race::CoinPurse: - return "Coin Purse"; - case Race::Coldain: - case Race::Coldain2: - case Race::Coldain3: - return "Coldain"; - case Race::Coral: - return "Coral"; - case Race::Corathus: - return "Corathus"; - case Race::Crab: - return "Crab"; - case Race::Cragbeast: - return "Cragbeast"; - case Race::Cragslither: - return "Cragslither"; - case Race::Crocodile: - return "Crocodile"; - case Race::Crystal: - return "Crystal"; - case Race::CrystalShard: - return "Crystal Shard"; - case Race::CrystalSphere: - return "Crystal Sphere"; - case Race::CrystalSpider: - return "Crystal Spider"; - case Race::CrystalskinAmbuloid: - return "Crystalskin Ambuloid"; - case Race::CrystalskinSessiloid: - return "Crystalskin Sessiloid"; - case Race::DaisyMan: - return "Daisy Man"; - case Race::DarkElf: - case Race::NeriakCitizen: - return "Dark Elf"; - case Race::DarkLord: - return "Dark Lord"; - case Race::DemiLich: - return "Demi Lich"; - case Race::DemonVulture: - return "Demon Vulture"; - case Race::Dervish: - case Race::Dervish2: - case Race::Dervish3: - case Race::Dervish4: - return "Dervish"; - case Race::Dervish5: - return "Dervish(Ver. 5)"; - case Race::Dervish6: - return "Dervish(Ver. 6)"; - case Race::Devourer: - return "Devourer"; - case Race::DireWolf: - return "Dire Wolf"; - case Race::DiscordShip: - return "Discord Ship"; - case Race::Discordling: - return "Discordling"; - case Race::DiseasedFiend: - return "Diseased Fiend"; - case Race::Djinn: - return "Djinn"; - case Race::Drachnid: - case Race::Drachnid2: - return "Drachnid"; - case Race::DrachnidCocoon: - return "Drachnid Cocoon"; - case Race::Dracolich: - return "Dracolich"; - case Race::Draglock: - return "Draglock"; - case Race::LavaDragon: - case Race::DragonSkeleton: - case Race::WaterDragon: - case Race::VeliousDragon: - case Race::ClockworkDragon: - case Race::BlackAndWhiteDragon: - case Race::GhostDragon: - case Race::PrismaticDragon: - case Race::Quarm: - case Race::Dragon: - case Race::Dragon2: - case Race::Dragon3: - case Race::Dragon4: - case Race::Dragon5: - case Race::Dragon6: - case Race::Dragon7: - return "Dragon"; - case Race::DragonBones: - return "Dragon Bones"; - case Race::DragonEgg: - return "Dragon Egg"; - case Race::DragonStatue: - return "Dragon Statue"; - case Race::Dragorn: - return "Dragorn"; - case Race::DragornBox: - return "Dragorn Box"; - case Race::Drake: - case Race::Drake2: - case Race::Drake3: - return "Drake"; - case Race::Drakkin: - return "Drakkin"; - case Race::Drixie: - return "Drixie"; - case Race::Drogmor: - return "Drogmore"; - case Race::Drolvarg: - return "Drolvarg"; - case Race::Dryad: - return "Dryad"; - case Race::Dwarf: - case Race::KaladimCitizen: - return "Dwarf"; - case Race::DynamiteKeg: - return "Dynamite Keg"; - case Race::Dynleth: - return "Dyn'Leth"; - case Race::EarthElemental: - case Race::EarthElemental2: - return "Earth Elemental"; - case Race::EarthMephit: - return "Earth Mephit"; - case Race::GiantEel: - return "Eel"; - case Race::Efreeti: - case Race::Efreeti2: - return "Efreeti"; - case Race::Elddar: - return "Elddar"; - case Race::Elemental: - return "Elemental"; - case Race::ElkHead: - return "Elk Head"; - case Race::ElvenBoat: - return "Elven Boat"; - case Race::ElvenGhost: - return "Elven Ghost"; - case Race::EnchantedArmor: - return "Enchanted Armor"; - case Race::Erollisi: - return "Erollisi"; - case Race::Erudite: - case Race::EruditeCitizen: - case Race::Erudite2: - return "Erudite"; - case Race::EvanTest: - return "Evan Test"; - case Race::EvilEye: - case Race::EvilEye2: - case Race::EvilEye3: - return "Evil Eye"; - case Race::Exoskeleton: - return "Exoskeleton"; - case Race::ExplosiveCart: - return "Explosive Cart"; - case Race::EyeOfZomm: - return "Eye"; - case Race::Fairy: - case Race::Fairy2: - return "Fairy"; - case Race::FallenKnight: - return "Fallen Knight"; - case Race::Faun: - return "Faun"; - case Race::FayDrake: - return "Fay Drake"; - case Race::FenninRo: - return "Fennin Ro"; - case Race::Feran: - return "Feran"; - case Race::FeranMount: - return "Feran Mount"; - case Race::Fiend: - return "Fiend"; - case Race::FireElemental: - case Race::FireElemental2: - return "Fire Elemental"; - case Race::FireMephit: - return "Fire Mephit"; - case Race::Fish: - case Race::KunarkFish: - return "Fish"; - case Race::Flag: - return "Flag"; - case Race::FloatingIsland: - return "Floating Island"; - case Race::FloatingSkull: - return "Floating Skull"; - case Race::FloatingTower: - return "Floating Tower"; - case Race::Fly: - return "Fly"; - case Race::FlyingCarpet: - return "Flying Carpet"; - case Race::ForestGiant2: - return "Forest Giant"; - case Race::Frog: - case Race::Frog2: - return "Frog"; - case Race::Froglok: - case Race::FroglokGhoul: - case Race::Froglok2: - return "Froglok"; - case Race::FroglokGhost: - return "Froglok Ghost"; - case Race::FroglokSkeleton: - return "Froglok Skeleton"; - case Race::FungalFiend: - return "Fungal Fiend"; - case Race::FungusPatch: - return "Fungus Patch"; - case Race::Fungusman: - return "Fungusman"; - case Race::Galorian: - return "Galorian"; - case Race::Gargoyle: - case Race::Gargoyle2: - return "Gargoyle"; - case Race::Gasbag: - return "Gasbag"; - case Race::GelatinousCube: - case Race::GelatinousCube2: - return "Gelatinous Cube"; - case Race::Gelidran: - return "Gelidran"; - case Race::Genari: - return "Genari"; - case Race::Geonid: - return "Geonid"; - case Race::Ghost: - case Race::DwarfGhost: - case Race::EruditeGhost: - case Race::PirateGhost: - return "Ghost"; - case Race::GhostShip: - case Race::GhostShip2: - return "Ghost Ship"; - case Race::Ghoul: - case Race::Ghoul2: - return "Ghoul"; - case Race::Giant: - case Race::ForestGiant: - case Race::FrostGiant: - case Race::StormGiant: - case Race::EarthGolem: - case Race::IronGolem: - case Race::StormGolem: - case Race::AirGolem: - case Race::WoodGolem: - case Race::FireGolem: - case Race::WaterGolem: - case Race::Giant2: - case Race::Giant3: - return "Giant"; - case Race::GiantClockwork: - return "Giant Clockwork"; - case Race::Giant4: - return "Giant(Rallosian mats)"; - case Race::GiantShade: - return "Giant Shade"; - case Race::Gigyn: - return "Gigyn"; - case Race::GingerbreadMan: - return "Gingerbread Man"; - case Race::Girplan: - return "Girplan"; - case Race::Gnoll: - case Race::Gnoll2: - case Race::Gnoll3: - return "Gnoll"; - case Race::Gnome: - return "Gnome"; - case Race::Gnomework: - return "Gnomework"; - case Race::GnomishBalloon: - return "Gnomish Balloon"; - case Race::GnomishBoat: - return "Gnomish Boat"; - case Race::GnomishHoveringTransport: - return "Gnomish Hovering Transport"; - case Race::GnomishRocketPack: - return "Gnomish Rocket Pack"; - case Race::Goblin: - case Race::Bloodgill: - case Race::KunarkGoblin: - case Race::NewGoblin: - case Race::Goblin2: - return "Goblin"; - case Race::Luclin2: - return "God - Luclin(Ver. 2)"; - case Race::Luclin3: - return "God - Luclin(Ver. 3)"; - case Race::Luclin4: - return "God - Luclin(Ver. 4)"; - case Race::GodOfDiscord: - return "God of Discord"; - case Race::Golem: - case Race::Golem2: - return "Golem"; - case Race::Goo: - case Race::Goo2: - case Race::Goo3: - case Race::Goo4: - return "Goo"; - case Race::Goral: - return "Goral"; - case Race::GoralMount: - return "Goral Mount"; - case Race::Gorgon: - return "Gorgon"; - case Race::Gorilla: - case Race::Gorilla2: - return "Gorilla"; - case Race::GrandfatherClock: - return "Grandfather Clock"; - case Race::GrekenYoung: - return "Greken - Young"; - case Race::GrekenYoungAdult: - return "Greken - Young Adult"; - case Race::Grendlaen: - return "Grendlaen"; - case Race::GriegVeneficus: - return "Grieg Veneficus"; - case Race::Griffin: - case Race::Griffin2: - return "Griffin"; - case Race::Grimling: - return "Grimling"; - case Race::GroundShaker: - return "Ground Shaker"; - case Race::FreeportGuard: - case Race::Felguard: - case Race::Fayguard: - case Race::VahShirGuard: - return "Guard"; - case Race::GuardOfJustice: - return "Guard of Justice"; - case Race::GuardianCpu: - return "Guardian CPU"; - case Race::Hadal: - return "Hadal"; - case Race::Hag: - return "Hag"; - case Race::HalfElf: - return "Half Elf"; - case Race::Halfling: - case Race::RivervaleCitizen: - return "Halfling"; - case Race::Harpy: - case Race::Harpy2: - return "Harpy"; - case Race::HighElf: - return "High Elf"; - case Race::Hippogriff: - return "Hippogriff"; - case Race::Holgresh: - case Race::Holgresh2: - return "Holgresh"; - case Race::HoneyPot: - return "Honey Pot"; - case Race::Horse: - case Race::Horse2: - case Race::Horse3: - return "Horse"; - case Race::HoveringPlatform: - return "Hovering Platform"; - case Race::Hraquis: - return "Hraquis"; - case Race::Human: - case Race::HighpassCitizen: - case Race::QeynosCitizen: - case Race::Human2: - return "Human"; - case Race::HumanGhost: - return "Human Ghost"; - case Race::Huvul: - return "Huvul"; - case Race::HydraCrystal: - return "Hydra Crystal"; - case Race::HydraMount: - return "Hydra Mount"; - case Race::Hydra: - return "Hydra NPC"; - case Race::Hynid: - return "Hynid"; - case Race::IceSpectre: - return "Ice Spectre"; - case Race::Ikaav: - return "Ikaav"; - case Race::Iksar: - case Race::IksarCitizen: - return "Iksar"; - case Race::IksarGhost: - return "Iksar Ghost"; - case Race::IksarGolem: - return "Iksar Golem"; - case Race::IksarSkeleton: - return "Iksar Skeleton"; - case Race::IksarSpirit: - return "Iksar Spirit"; - case Race::Imp: - return "Imp"; - case Race::Innoruuk: - return "Innoruuk"; - case Race::Insect: - return "Insect"; - case Race::InteractiveObject: - return "Interactive Object"; - case Race::InvisibleMan: - case Race::InvisibleMan2: - case Race::InvisibleMan3: - return "Invisible Man"; - case Race::InvisibleManOfZomm: - return "Invisible Man of Zomm"; - case Race::Ixt: - return "Ixt"; - case Race::Jokester: - return "Jokester"; - case Race::JumJumBucket: - return "Jum Jum Bucket"; - case Race::JunkBeast: - return "Junk Beast"; - case Race::Kangon: - return "Kangon"; - case Race::KangonMount: - return "Kangon Mount"; - case Race::Karana: - return "Karana"; - case Race::PhinigelAutropos: - case Race::Kedge: - return "Kedge"; - case Race::Kerran: - case Race::Kerran2: - return "Kerran"; - case Race::Kirin: - case Race::Kirin2: - return "Kirin"; - case Race::KnightOfHate: - return "Knight of Hate"; - case Race::KnightOfPestilence: - return "Knight of Pestilence"; - case Race::Kobold: - case Race::Kobold2: - return "Kobold"; - case Race::Kraken: - return "Kraken"; - case Race::Kyv: - return "Kyv"; - case Race::Launch: - return "Launch"; - case Race::LavaRock: - return "Lava Rock"; - case Race::LavaSpider: - return "Lava Spider"; - case Race::LavaSpiderQueen: - return "Lava Spider Queen"; - case Race::Leech: - return "Leech"; - case Race::Lepertoloth: - return "Lepertoloth"; - case Race::Lightcrawler: - return "Lightcrawler"; - case Race::LightingWarrior: - return "Lightning Warrior"; - case Race::Lion: - return "Lion"; - case Race::LizardMan: - return "Lizard Man"; - case Race::Luclin: - return "Luclin"; - case Race::Luggald: - case Race::Luggald2: - return "Luggald"; - case Race::Luggald3: - return "Luggalds"; - case Race::Malarian: - return "Malarian"; - case Race::Mammoth: - case Race::Mammoth2: - return "Mammoth"; - case Race::ManEatingPlant: - return "Man - Eating Plant"; - case Race::Mansion: - return "Mansion"; - case Race::Manticore: - return "Manticore"; - case Race::Unknown5: - return "Mantrap"; - case Race::Marionette: - return "Marionette"; - case Race::Mastruq: - return "Mastruq"; - case Race::MataMuram: - return "Mata Muram"; - case Race::Toolbox: - return "Medium Plant"; - case Race::Mephit: - return "Mephit"; - case Race::MerchantShip: - return "Merchant Ship"; - case Race::Mermaid: - return "Mermaid"; - case Race::Mimic: - return "Mimic"; - case Race::MiniPom: - return "Mini POM"; - case Race::Minotaur: - case Race::Minotaur2: - case Race::Minotaur3: - case Race::Minotaur4: - return "Minotaur"; - case Race::MithanielMarr: - return "Mithaniel Marr"; - case Race::MorellThule: - return "Morell Thule"; - case Race::Mosquito: - return "Mosquito"; - case Race::MouthOfInsanity: - return "Mouth of Insanity"; - case Race::Muddite: - return "Muddite"; - case Race::Mummy: - return "Mummy"; - case Race::MuramiteArmorPile: - return "Muramite Armor Pile"; - case Race::Murkglider: - return "Murkglider"; - case Race::MurkgliderEggSack: - return "Murkglider Egg Sac"; - case Race::Mutna: - return "Mutna"; - case Race::Nekhon: - return "Nekhon"; - case Race::Netherbian: - return "Netherbian"; - case Race::Nightmare: - return "Nightmare"; - case Race::NightmareGargoyle: - return "Nightmare Gargoyle"; - case Race::NightmareGoblin: - return "Nightmare Goblin"; - case Race::NightmareMephit: - return "Nightmare Mephit"; - case Race::Unicorn2: - case Race::Unicorn3: - return "Nightmare / Unicorn"; - case Race::NightmareWraith: - return "Nightmare Wraith"; - case Race::Nihil: - return "Nihil"; - case Race::Nilborien: - return "Nilborien"; - case Race::Noc: - return "Noc"; - case Race::Nymph: - return "Nymph"; - case Race::Ogre: - case Race::OggokCitizen: - return "Ogre"; - case Race::Ogre2: - return "Ogre NPC - Male"; - case Race::Orb: - return "Orb"; - case Race::Orc: - case Race::Orc2: - return "Orc"; - case Race::Othmir: - return "Othmir"; - case Race::Owlbear: - return "Owlbear"; - case Race::ParasiticScavenger: - return "Parasitic Scavenger"; - case Race::Pegasus: - case Race::Pegasus2: - case Race::Pegasus3: - return "Pegasus"; - case Race::Phoenix: - return "Phoenix"; - case Race::Piranha: - return "Piranha"; - case Race::OneArmedPirate: - case Race::SpiritmasterNadox: - case Race::BrokenSkullTaskmaster: - case Race::GnomePirate: - case Race::DarkElfPirate: - case Race::OgrePirate: - case Race::HumanPirate: - case Race::EruditePirate: - return "Pirate"; - case Race::PirateShip: - return "Pirate Ship"; - case Race::Pixie: - return "Pixie"; - case Race::PoisonFrog: - return "Poison Frog"; - case Race::Portal2: - return "Portal"; - case Race::PowderKeg: - return "Powder Keg"; - case Race::PressurePlate: - return "Pressure Plate"; - case Race::PufferSpore: - return "Puffer Spore"; - case Race::Puma: - case Race::Puma2: - case Race::Puma3: - return "Puma"; - case Race::Pusling: - return "Pusling"; - case Race::Pyrilen: - return "Pyrilen"; - case Race::Ratuk: - return "Ra`tuk"; - case Race::Rabbit: - return "Rabbit"; - case Race::StatueOfRallosZek: - case Race::NewRallosZek: - return "Rallos Zek"; - case Race::RallosOgre: - return "Rallos Zek Minion"; - case Race::Raptor: - case Race::Raptor2: - return "Raptor"; - case Race::RaptorMount: - return "Raptor Mount"; - case Race::GiantRat: - case Race::Rat: - return "Rat"; - case Race::RatMount: - return "Rat Mount"; - case Race::Ratman: - case Race::Ratman2: - return "Ratman"; - case Race::ReanimatedHand: - return "Reanimated Hand"; - case Race::Recuso: - return "Recuso"; - case Race::RegenerationPool: - return "Regeneration Pool"; - case Race::RelicCase: - return "Relic case "; - case Race::RhinoBeetle: - return "Rhino Beetle"; - case Race::Rhinoceros: - return "Rhinoceros"; - case Race::RobocopterOfZomm: - return "Robocopter of Zomm"; - case Race::RockPile: - return "Rock Pile"; - case Race::Rockhopper: - return "Rockhopper"; - case Race::RonnieTest: - return "Ronnie Test"; - case Race::RootTentacle: - return "Root Tentacle"; - case Race::RotDogMount: - return "Rot Dog Mount"; - case Race::RotDog: - return "Rotdog"; - case Race::Rotocopter: - return "Rotocopter"; - case Race::Rowboat: - return "Rowboat"; - case Race::RoyalGuard: - return "Royal Guard"; - case Race::RujarkianOrc: - case Race::MasterOrc: - return "Rujarkian Orc"; - case Race::RunedOrb: - return "Runed Orb"; - case Race::RunicSymbol: - return "Runic Symbol"; - case Race::Sabertooth: - return "Saber - toothed Cat"; - case Race::SaltpetterBomb: - return "Saltpetter Bomb"; - case Race::SandElf: - return "Sand Elf"; - case Race::Sandman: - return "Sandman"; - case Race::Sarnak: - case Race::Sarnak2: - return "Sarnak"; - case Race::SarnakGolem: - return "Sarnak Golem"; - case Race::SarnakSpirit: - return "Sarnak Spirit"; - case Race::Saryrn: - return "Saryrn"; - case Race::Satyr: - return "Satyr"; - case Race::ScaledWolf: - return "Scaled Wolf"; - case Race::Scarecrow: - case Race::Scarecrow2: - return "Scarecrow"; - case Race::ScarletCheetah: - return "Scarlet Cheetah"; - case Race::ScleraMount: - return "Sclera Mount"; - case Race::Scorpion: - case Race::IksarScorpion: - case Race::Scorpion2: - return "Scorpion"; - case Race::Scrykin: - return "Scrykin"; - case Race::SeaTurtle: - return "Sea Turtle"; - case Race::SeaHorse: - return "Seahorse"; - case Race::Selyrah: - return "Selyrah"; - case Race::SelyrahMount: - return "Selyrah Mount"; - case Race::LordInquisitorSeru: - return "Seru"; - case Race::ServantOfShadow: - return "Servant of Shadow"; - case Race::SessiloidMount: - return "Sessiloid Mount"; - case Race::Shade: - case Race::Shade2: - case Race::Shade3: - return "Shade"; - case Race::KhatiSha: - return "Shadel"; - case Race::ShamblingMound: - return "Shambling Mound"; - case Race::Shark: - return "Shark"; - case Race::Shiknar: - return "Shik'Nar"; - case Race::Shiliskin: - return "Shiliskin"; - case Race::Ship: - return "Ship"; - case Race::ShipInABottle: - return "Ship in a Bottle"; - case Race::Shissar: - case Race::Shissar2: - return "Shissar"; - case Race::Shrieker: - return "Shrieker"; - case Race::Siren: - case Race::Siren2: - return "Siren"; - case Race::SkeletalHorse: - return "Skeletal Horse"; - case Race::Skeleton: - case Race::Skeleton2: - case Race::Skeleton3: - return "Skeleton"; - case Race::Skunk: - return "Skunk"; - case Race::Skystrider: - return "Skystrider"; - case Race::Plant2: - return "Small Plant"; - case Race::GiantSnake: - case Race::Snake: - return "Snake"; - case Race::SnakeElemental: - return "Snake Elemental"; - case Race::SnowDervish: - return "Snow Dervish"; - case Race::SnowRabbit: - return "Snow Rabbit"; - case Race::Sokokar: - return "Sokokar"; - case Race::SokokarMount: - return "Sokokar Mount"; - case Race::SokokarMount2: - return "Sokokar(w saddle)"; - case Race::SolusekRo: - case Race::SolusekRo2: - return "Solusek Ro"; - case Race::SolusekRoGuard: - return "Solusek Ro Guard"; - case Race::SonicWolf: - return "Sonic Wolf"; - case Race::SoulDevourer: - return "Soul Devourer"; - case Race::Spectre: - case Race::Spectre2: - return "Spectre"; - case Race::SpellParticle: - return "Spell Particle 1"; - case Race::Sphinx: - case Race::Sphinx2: - return "Sphinx"; - case Race::GiantSpider: - case Race::Spider: - return "Spider"; - case Race::SpiderEggSack: - return "Spider Egg Sack"; - case Race::SpiderMount: - return "Spider Mount"; - case Race::SpiderQueen: - return "Spider Queen"; - case Race::SpikeTrap: - return "Spike Trap"; - case Race::SpiritWolf: - return "Spirit Wolf"; - case Race::Sporali: - return "Sporali"; - case Race::StoneJug: - return "Stone Jug"; - case Race::StonePylon: - return "Stone Pylon"; - case Race::StoneRing: - return "Stone Ring"; - case Race::StoneWorker: - case Race::StoneWorker2: - return "Stone Worker"; - case Race::Stonegrabber: - return "Stonegrabber"; - case Race::Stonemite: - return "Stonemite"; - case Race::Stormrider: - return "Stormrider"; - case Race::Succubus: - return "Succubus"; - case Race::Succulent: - return "Succulent"; - case Race::SullonZek: - return "Sullon Zek"; - case Race::Shadel: - return "Sun Revenant"; - case Race::Sunflower: - return "Sunflower"; - case Race::Swinetor: - return "Swinetor"; - case Race::Swordfish: - return "Swordfish"; - case Race::Synarcana: - return "Synarcana"; - case Race::Table: - return "Table"; - case Race::FroglokTadpole: - return "Tadpole"; - case Race::Taelosian: - return "Taelosian"; - case Race::WineCask: - return "Tall Plant"; - case Race::TallonZek: - return "Tallon Zek"; - case Race::Taneth: - return "Taneth"; - case Race::TarewMarr: - return "Tarew Marr"; - case Race::Tegi: - return "Tegi"; - case Race::TeleportMan: - return "Teleport Man"; - case Race::TeleportationStand: - return "Teleportation Stand"; - case Race::Telmira: - return "Telmira"; - case Race::TentacleTerror: - case Race::TentacleTerror2: - return "Tentacle Terror"; - case Race::TerrisThule: - return "Terris Thule"; - case Race::TestObject: - return "Test Object"; - case Race::Rathe: - return "The Rathe"; - case Race::TribunalNew: - return "The Tribunal"; - case Race::ThoughtHorror: - return "Thought Horror"; - case Race::Tiger: - return "Tiger"; - case Race::TinSoldier: - return "Tin Soldier"; - case Race::Plant: - return "Toolbox"; - case Race::TopiaryLion: - return "Topiary Lion"; - case Race::TopiaryLionMount: - return "Topiary Lion Mount"; - case Race::Tormentor: - return "Tormentor"; - case Race::Totem: - case Race::Totem2: - return "Totem"; - case Race::Trakanon: - return "Trakanon"; - case Race::Tranquilion: - return "Tranquilion"; - case Race::Treant: - case Race::Treant2: - case Race::Treant3: - return "Treant"; - case Race::Tribunal: - return "Tribunal"; - case Race::Triumvirate: - return "Triumvirate"; - case Race::Troll: - case Race::GrobbCitizen: - case Race::TrollCrewMember: - case Race::PirateDeckhand: - case Race::BrokenSkullPirate: - return "Troll"; - case Race::TrollZombie: - return "Troll Zombie"; - case Race::Trusik: - return "Trusik"; - case Race::Tsetsian: - return "Tsetsian"; - case Race::Tumbleweed: - return "Tumbleweed"; - case Race::Tunare: - return "Tunare"; - case Race::Turepta: - return "Turepta"; - case Race::Ukun: - return "Ukun"; - case Race::Ulthork: - return "Ulthork"; - case Race::UndeadChokidai: - return "Undead Chokidai"; - case Race::UndeadFootman: - return "Undead Footman"; - case Race::UndeadFroglok: - return "Undead Froglok"; - case Race::UndeadIksar: - return "Undead Iksar"; - case Race::UndeadKnight: - return "Undead Knight"; - case Race::UndeadSarnak: - return "Undead Sarnak"; - case Race::UndeadVeksar: - return "Undead Veksar"; - case Race::Underbulk: - return "Underbulk"; - case Race::Unicorn: - return "Unicorn"; - case Race::Doug: - case Race::MinorIllusion: - case Race::Tree: - case Race::Unknown: - case Race::Unknown2: - case Race::Unknown3: - case Race::Unknown4: - return "UNKNOWN RACE"; - case Race::VahShir: - case Race::VahShirKing: - return "Vah Shir"; - case Race::VahShirSkeleton: - return "Vah Shir Skeleton"; - case Race::VallonZek: - return "Vallon Zek"; - case Race::Valorian: - case Race::Valorian2: - return "Valorian"; - case Race::Vampire: - case Race::ElfVampire: - case Race::Vampire2: - case Race::VampireVolatalis: - case Race::UndeadVampire: - case Race::Vampire3: - case Race::MasterVampire: - case Race::Vampire4: - return "Vampire"; - case Race::Vase: - return "Vase"; - case Race::Vegerog: - return "Vegerog"; - case Race::Veksar: - case Race::Veksar2: - case Race::Veksar3: - return "Veksar"; - case Race::VenrilSathir: - return "Venril Sathir"; - case Race::VineMaw: - return "Vine Maw"; - case Race::Wagon: - return "Wagon"; - case Race::Walrus: - return "Walrus"; - case Race::WarBoar: - case Race::WarBoar2: - return "War Boar"; - case Race::WarWraith: - return "War Wraith"; - case Race::Wasp: - return "Wasp"; - case Race::WaterElemental: - case Race::WaterElemental2: - return "Water Elemental"; - case Race::WaterMephit: - return "Water Mephit"; - case Race::WaterSpout: - return "Water Spout"; - case Race::WeaponRack: - case Race::WeaponRack2: - return "Weapon Rack"; - case Race::Web: - return "Web"; - case Race::WeddingAltar: - return "Wedding Altar"; - case Race::WeddingArbor: - return "Wedding Arbor"; - case Race::WeddingFlowers: - return "Wedding Flowers"; - case Race::Wereorc: - return "Wereorc"; - case Race::Werewolf: - case Race::Werewolf2: - case Race::Werewolf3: - return "Werewolf"; - case Race::WetfangMinnow: - return "Wetfang Minnow"; - case Race::Whirligig: - return "Whirligig"; - case Race::WickerBasket: - return "Wicker Basket"; - case Race::Wisp: - return "Will - O - Wisp"; - case Race::StoneJug2: - case Race::WineCask2: - return "Wine Cask"; - case Race::Witheran: - case Race::Witheran2: - return "Witheran"; - case Race::Wolf: - case Race::WolfElemental: - case Race::Wolf2: - return "Wolf"; - case Race::WoodElf: - return "Wood Elf"; - case Race::Worg: - case Race::Worg2: - return "Worg"; - case Race::Worm: - return "Worm"; - case Race::Wretch: - return "Wretch"; - case Race::Wrulon: - case Race::Wrulon2: - return "Wrulon"; - case Race::Wurm: - case Race::Wurm2: - return "Wurm"; - case Race::WurmMount: - return "Wurm Mount"; - case Race::Wyvern: - case Race::Wyvern2: - return "Wyvern"; - case Race::Xalgoz: - return "Xalgoz"; - case Race::Xaric: - return "Xaric the Unspoken"; - case Race::Xegony: - return "Xegony"; - case Race::Yakkar: - return "Yakkar"; - case Race::Yeti: - return "Yeti"; - case Race::Zebuxoruk: - return "Zebuxoruk"; - case Race::ZebuxoruksCage: - return "Zebuxoruk's Cage"; - case Race::Zelniak: - return "Zelniak"; - case Race::Zombie: - case Race::Zombie2: - return "Zombie"; - default: - return "UNKNOWN RACE"; + case Race::Abhorrent: + return "Abhorrent"; + case Race::AirElemental: + case Race::AirElemental2: + return "Air Elemental"; + case Race::AirMephit: + return "Air Mephit"; + case Race::Akhevan: + case Race::Akheva: + return "Akheva"; + case Race::Alaran: + return "Alaran"; + case Race::AlaranGhost: + return "Alaran Ghost"; + case Race::AlaranSentryStone: + return "Alaran Sentry Stone"; + case Race::Alligator: + case Race::Alligator2: + return "Alligator"; + case Race::Denizen: + case Race::Amygdalan: + return "Amygdalan"; + case Race::Aneuk: + return "Aneuk"; + case Race::AnimatedArmor: + return "Animated Armor"; + case Race::AnimatedHand: + return "Animated Hand"; + case Race::AnimatedStatue: + case Race::AnimatedStatue2: + return "Animated Statue"; + case Race::Apexus: + return "Apexus"; + case Race::Arachnid: + return "Arachnid"; + case Race::ArcanistOfHate: + return "Arcanist of Hate"; + case Race::Armadillo: + return "Armadillo"; + case Race::ArmorRack: + return "Armor Rack"; + case Race::Aviak: + case Race::Aviak2: + return "Aviak"; + case Race::AviakPullAlong: + return "Aviak Pull Along"; + case Race::AyonaeRo: + return "Ayonae Ro"; + case Race::Banner: + case Race::Banner2: + case Race::Banner3: + case Race::Banner4: + case Race::Banner5: + case Race::Banner6: + case Race::Banner7: + return "Banner"; + case Race::TenthAnniversaryBanner: + return "10th Anniversary Banner"; + case Race::Banshee: + case Race::Banshee2: + case Race::Banshee3: + return "Banshee"; + case Race::Barbarian: + case Race::HalasCitizen: + return "Barbarian"; + case Race::Barrel: + return "Barrel"; + case Race::UndeadBoat: + return "Barrel Barge Ship"; + case Race::Basilisk: + return "Basilisk"; + case Race::GiantBat: + case Race::Bat: + case Race::Bat2: + return "Bat"; + case Race::Bazu: + return "Bazu"; + case Race::Bear: + case Race::Bear2: + case Race::Bear3: + return "Bear"; + case Race::BearMount: + return "Bear Mount"; + case Race::BearTrap: + return "Bear Trap"; + case Race::Beetle: + case Race::Beetle2: + case Race::Beetle3: + return "Beetle"; + case Race::HumanBeggar: + return "Beggar"; + case Race::Bellikos: + return "Bellikos"; + case Race::Bertoxxulous: + case Race::BertoxxulousNew: + return "Bertoxxulous"; + case Race::Bixie: + case Race::Bixie2: + return "Bixie"; + case Race::BlimpShip: + return "Blimp Ship"; + case Race::BlindDreamer: + return "Blind Dreamer"; + case Race::BloodRaven: + return "Blood Raven"; + case Race::Boat: + case Race::Boat2: + return "Boat"; + case Race::Bolvirk: + return "Bolvirk"; + case Race::BoneGolem: + case Race::BoneGolem2: + return "Bone Golem"; + case Race::Bones: + return "Bones"; + case Race::BookDervish: + return "Book Dervish"; + case Race::Portal: + return "BoT Portal"; + case Race::Boulder: + return "Boulder"; + case Race::Box: + return "Box"; + case Race::Braxi: + return "Braxi"; + case Race::BraxiMount: + return "Braxi Mount"; + case Race::Brell: + return "Brell"; + case Race::BrellsFirstCreation: + return "Brell's First Creation"; + case Race::Bristlebane: + return "Bristlebane"; + case Race::BrokenClockwork: + return "Broken Clockwork"; + case Race::Brontotherium: + return "Brontotherium"; + case Race::Brownie: + case Race::Brownie2: + return "Brownie"; + case Race::Bubonian: + return "Bubonian"; + case Race::BubonianUnderling: + return "Bubonian Underling"; + case Race::Burynai: + case Race::Burynai2: + return "Burynai"; + case Race::TenthAnniversaryCake: + return "10th Anniversary Cake"; + case Race::Campfire: + return "Campfire"; + case Race::CarrierHand: + return "Carrier Hand"; + case Race::Cat: + return "Cat"; + case Race::CazicThule: + case Race::CazicThule2: + return "Cazic Thule"; + case Race::Centaur: + case Race::Centaur2: + return "Centaur"; + case Race::Chest: + case Race::Chest2: + case Race::Chest3: + return "Chest"; + case Race::Chimera: + case Race::Chimera2: + return "Chimera"; + case Race::Chokidai: + return "Chokidai"; + case Race::Clam: + return "Clam"; + case Race::CliknarMount: + return "Cliknar Mount"; + case Race::CliknarQueen: + return "Cliknar Queen"; + case Race::CliknarSoldier: + return "Cliknar Soldier"; + case Race::CliknarWorker: + return "Cliknar Worker"; + case Race::ClockworkBeetle: + return "Clockwork Beetle"; + case Race::ClockworkBoar: + return "Clockwork Boar"; + case Race::ClockworkBomb: + return "Clockwork Bomb"; + case Race::ClockworkBrain: + return "Clockwork Brain"; + case Race::ClockworkGnome: + return "Clockwork Gnome"; + case Race::ClockworkGolem: + return "Clockwork Golem"; + case Race::ClockworkGuardian: + return "Clockwork Guardian"; + case Race::Cockatrice: + return "Cockatrice"; + case Race::Coffin: + case Race::Coffin2: + return "Coffin"; + case Race::CoinPurse: + return "Coin Purse"; + case Race::Coldain: + case Race::Coldain2: + case Race::Coldain3: + return "Coldain"; + case Race::Coral: + return "Coral"; + case Race::Corathus: + return "Corathus"; + case Race::Crab: + return "Crab"; + case Race::Cragbeast: + return "Cragbeast"; + case Race::Cragslither: + return "Cragslither"; + case Race::Crocodile: + return "Crocodile"; + case Race::Crystal: + return "Crystal"; + case Race::CrystalShard: + return "Crystal Shard"; + case Race::CrystalSphere: + return "Crystal Sphere"; + case Race::CrystalSpider: + return "Crystal Spider"; + case Race::CrystalskinAmbuloid: + return "Crystalskin Ambuloid"; + case Race::CrystalskinSessiloid: + return "Crystalskin Sessiloid"; + case Race::DaisyMan: + return "Daisy Man"; + case Race::DarkElf: + case Race::NeriakCitizen: + return "Dark Elf"; + case Race::DarkLord: + return "Dark Lord"; + case Race::DemiLich: + return "Demi Lich"; + case Race::DemonVulture: + return "Demon Vulture"; + case Race::Dervish: + case Race::Dervish2: + case Race::Dervish3: + case Race::Dervish4: + return "Dervish"; + case Race::Dervish5: + return "Dervish(Ver. 5)"; + case Race::Dervish6: + return "Dervish(Ver. 6)"; + case Race::Devourer: + return "Devourer"; + case Race::DireWolf: + return "Dire Wolf"; + case Race::DiscordShip: + return "Discord Ship"; + case Race::Discordling: + return "Discordling"; + case Race::DiseasedFiend: + return "Diseased Fiend"; + case Race::Djinn: + return "Djinn"; + case Race::Drachnid: + case Race::Drachnid2: + return "Drachnid"; + case Race::DrachnidCocoon: + return "Drachnid Cocoon"; + case Race::Dracolich: + return "Dracolich"; + case Race::Draglock: + return "Draglock"; + case Race::LavaDragon: + case Race::DragonSkeleton: + case Race::WaterDragon: + case Race::VeliousDragon: + case Race::ClockworkDragon: + case Race::BlackAndWhiteDragon: + case Race::GhostDragon: + case Race::PrismaticDragon: + case Race::Quarm: + case Race::Dragon: + case Race::Dragon2: + case Race::Dragon3: + case Race::Dragon4: + case Race::Dragon5: + case Race::Dragon6: + case Race::Dragon7: + return "Dragon"; + case Race::DragonBones: + return "Dragon Bones"; + case Race::DragonEgg: + return "Dragon Egg"; + case Race::DragonStatue: + return "Dragon Statue"; + case Race::Dragorn: + return "Dragorn"; + case Race::DragornBox: + return "Dragorn Box"; + case Race::Drake: + case Race::Drake2: + case Race::Drake3: + return "Drake"; + case Race::Drakkin: + return "Drakkin"; + case Race::Drixie: + return "Drixie"; + case Race::Drogmor: + return "Drogmore"; + case Race::Drolvarg: + return "Drolvarg"; + case Race::Dryad: + return "Dryad"; + case Race::Dwarf: + case Race::KaladimCitizen: + return "Dwarf"; + case Race::DynamiteKeg: + return "Dynamite Keg"; + case Race::Dynleth: + return "Dyn'Leth"; + case Race::EarthElemental: + case Race::EarthElemental2: + return "Earth Elemental"; + case Race::EarthMephit: + return "Earth Mephit"; + case Race::GiantEel: + return "Eel"; + case Race::Efreeti: + case Race::Efreeti2: + return "Efreeti"; + case Race::Elddar: + return "Elddar"; + case Race::Elemental: + return "Elemental"; + case Race::ElkHead: + return "Elk Head"; + case Race::ElvenBoat: + return "Elven Boat"; + case Race::ElvenGhost: + return "Elven Ghost"; + case Race::EnchantedArmor: + return "Enchanted Armor"; + case Race::Erollisi: + return "Erollisi"; + case Race::Erudite: + case Race::EruditeCitizen: + case Race::Erudite2: + return "Erudite"; + case Race::EvanTest: + return "Evan Test"; + case Race::EvilEye: + case Race::EvilEye2: + case Race::EvilEye3: + return "Evil Eye"; + case Race::Exoskeleton: + return "Exoskeleton"; + case Race::ExplosiveCart: + return "Explosive Cart"; + case Race::EyeOfZomm: + return "Eye"; + case Race::Fairy: + case Race::Fairy2: + return "Fairy"; + case Race::FallenKnight: + return "Fallen Knight"; + case Race::Faun: + return "Faun"; + case Race::FayDrake: + return "Fay Drake"; + case Race::FenninRo: + return "Fennin Ro"; + case Race::Feran: + return "Feran"; + case Race::FeranMount: + return "Feran Mount"; + case Race::Fiend: + return "Fiend"; + case Race::FireElemental: + case Race::FireElemental2: + return "Fire Elemental"; + case Race::FireMephit: + return "Fire Mephit"; + case Race::Fish: + case Race::KunarkFish: + return "Fish"; + case Race::Flag: + return "Flag"; + case Race::FloatingIsland: + return "Floating Island"; + case Race::FloatingSkull: + return "Floating Skull"; + case Race::FloatingTower: + return "Floating Tower"; + case Race::Fly: + return "Fly"; + case Race::FlyingCarpet: + return "Flying Carpet"; + case Race::ForestGiant2: + return "Forest Giant"; + case Race::Frog: + case Race::Frog2: + return "Frog"; + case Race::Froglok: + case Race::FroglokGhoul: + case Race::Froglok2: + return "Froglok"; + case Race::FroglokGhost: + return "Froglok Ghost"; + case Race::FroglokSkeleton: + return "Froglok Skeleton"; + case Race::FungalFiend: + return "Fungal Fiend"; + case Race::FungusPatch: + return "Fungus Patch"; + case Race::Fungusman: + return "Fungusman"; + case Race::Galorian: + return "Galorian"; + case Race::Gargoyle: + case Race::Gargoyle2: + return "Gargoyle"; + case Race::Gasbag: + return "Gasbag"; + case Race::GelatinousCube: + case Race::GelatinousCube2: + return "Gelatinous Cube"; + case Race::Gelidran: + return "Gelidran"; + case Race::Genari: + return "Genari"; + case Race::Geonid: + return "Geonid"; + case Race::Ghost: + case Race::DwarfGhost: + case Race::EruditeGhost: + case Race::PirateGhost: + return "Ghost"; + case Race::GhostShip: + case Race::GhostShip2: + return "Ghost Ship"; + case Race::Ghoul: + case Race::Ghoul2: + return "Ghoul"; + case Race::Giant: + case Race::ForestGiant: + case Race::FrostGiant: + case Race::StormGiant: + case Race::EarthGolem: + case Race::IronGolem: + case Race::StormGolem: + case Race::AirGolem: + case Race::WoodGolem: + case Race::FireGolem: + case Race::WaterGolem: + case Race::Giant2: + case Race::Giant3: + return "Giant"; + case Race::GiantClockwork: + return "Giant Clockwork"; + case Race::Giant4: + return "Giant(Rallosian mats)"; + case Race::GiantShade: + return "Giant Shade"; + case Race::Gigyn: + return "Gigyn"; + case Race::GingerbreadMan: + return "Gingerbread Man"; + case Race::Girplan: + return "Girplan"; + case Race::Gnoll: + case Race::Gnoll2: + case Race::Gnoll3: + return "Gnoll"; + case Race::Gnome: + return "Gnome"; + case Race::Gnomework: + return "Gnomework"; + case Race::GnomishBalloon: + return "Gnomish Balloon"; + case Race::GnomishBoat: + return "Gnomish Boat"; + case Race::GnomishHoveringTransport: + return "Gnomish Hovering Transport"; + case Race::GnomishRocketPack: + return "Gnomish Rocket Pack"; + case Race::Goblin: + case Race::Bloodgill: + case Race::KunarkGoblin: + case Race::NewGoblin: + case Race::Goblin2: + return "Goblin"; + case Race::Luclin2: + return "God - Luclin(Ver. 2)"; + case Race::Luclin3: + return "God - Luclin(Ver. 3)"; + case Race::Luclin4: + return "God - Luclin(Ver. 4)"; + case Race::GodOfDiscord: + return "God of Discord"; + case Race::Golem: + case Race::Golem2: + return "Golem"; + case Race::Goo: + case Race::Goo2: + case Race::Goo3: + case Race::Goo4: + return "Goo"; + case Race::Goral: + return "Goral"; + case Race::GoralMount: + return "Goral Mount"; + case Race::Gorgon: + return "Gorgon"; + case Race::Gorilla: + case Race::Gorilla2: + return "Gorilla"; + case Race::GrandfatherClock: + return "Grandfather Clock"; + case Race::GrekenYoung: + return "Greken - Young"; + case Race::GrekenYoungAdult: + return "Greken - Young Adult"; + case Race::Grendlaen: + return "Grendlaen"; + case Race::GriegVeneficus: + return "Grieg Veneficus"; + case Race::Griffin: + case Race::Griffin2: + return "Griffin"; + case Race::Grimling: + return "Grimling"; + case Race::GroundShaker: + return "Ground Shaker"; + case Race::FreeportGuard: + case Race::Felguard: + case Race::Fayguard: + case Race::VahShirGuard: + return "Guard"; + case Race::GuardOfJustice: + return "Guard of Justice"; + case Race::GuardianCpu: + return "Guardian CPU"; + case Race::Hadal: + return "Hadal"; + case Race::Hag: + return "Hag"; + case Race::HalfElf: + return "Half Elf"; + case Race::Halfling: + case Race::RivervaleCitizen: + return "Halfling"; + case Race::Harpy: + case Race::Harpy2: + return "Harpy"; + case Race::HighElf: + return "High Elf"; + case Race::Hippogriff: + return "Hippogriff"; + case Race::Holgresh: + case Race::Holgresh2: + return "Holgresh"; + case Race::HoneyPot: + return "Honey Pot"; + case Race::Horse: + case Race::Horse2: + case Race::Horse3: + return "Horse"; + case Race::HoveringPlatform: + return "Hovering Platform"; + case Race::Hraquis: + return "Hraquis"; + case Race::Human: + case Race::HighpassCitizen: + case Race::QeynosCitizen: + case Race::Human2: + return "Human"; + case Race::HumanGhost: + return "Human Ghost"; + case Race::Huvul: + return "Huvul"; + case Race::HydraCrystal: + return "Hydra Crystal"; + case Race::HydraMount: + return "Hydra Mount"; + case Race::Hydra: + return "Hydra NPC"; + case Race::Hynid: + return "Hynid"; + case Race::IceSpectre: + return "Ice Spectre"; + case Race::Ikaav: + return "Ikaav"; + case Race::Iksar: + case Race::IksarCitizen: + return "Iksar"; + case Race::IksarGhost: + return "Iksar Ghost"; + case Race::IksarGolem: + return "Iksar Golem"; + case Race::IksarSkeleton: + return "Iksar Skeleton"; + case Race::IksarSpirit: + return "Iksar Spirit"; + case Race::Imp: + return "Imp"; + case Race::Innoruuk: + return "Innoruuk"; + case Race::Insect: + return "Insect"; + case Race::InteractiveObject: + return "Interactive Object"; + case Race::InvisibleMan: + case Race::InvisibleMan2: + case Race::InvisibleMan3: + return "Invisible Man"; + case Race::InvisibleManOfZomm: + return "Invisible Man of Zomm"; + case Race::Ixt: + return "Ixt"; + case Race::Jokester: + return "Jokester"; + case Race::JumJumBucket: + return "Jum Jum Bucket"; + case Race::JunkBeast: + return "Junk Beast"; + case Race::Kangon: + return "Kangon"; + case Race::KangonMount: + return "Kangon Mount"; + case Race::Karana: + return "Karana"; + case Race::PhinigelAutropos: + case Race::Kedge: + return "Kedge"; + case Race::Kerran: + case Race::Kerran2: + return "Kerran"; + case Race::Kirin: + case Race::Kirin2: + return "Kirin"; + case Race::KnightOfHate: + return "Knight of Hate"; + case Race::KnightOfPestilence: + return "Knight of Pestilence"; + case Race::Kobold: + case Race::Kobold2: + return "Kobold"; + case Race::Kraken: + return "Kraken"; + case Race::Kyv: + return "Kyv"; + case Race::Launch: + return "Launch"; + case Race::LavaRock: + return "Lava Rock"; + case Race::LavaSpider: + return "Lava Spider"; + case Race::LavaSpiderQueen: + return "Lava Spider Queen"; + case Race::Leech: + return "Leech"; + case Race::Lepertoloth: + return "Lepertoloth"; + case Race::Lightcrawler: + return "Lightcrawler"; + case Race::LightingWarrior: + return "Lightning Warrior"; + case Race::Lion: + return "Lion"; + case Race::LizardMan: + return "Lizard Man"; + case Race::Luclin: + return "Luclin"; + case Race::Luggald: + case Race::Luggald2: + return "Luggald"; + case Race::Luggald3: + return "Luggalds"; + case Race::Malarian: + return "Malarian"; + case Race::Mammoth: + case Race::Mammoth2: + return "Mammoth"; + case Race::ManEatingPlant: + return "Man - Eating Plant"; + case Race::Mansion: + return "Mansion"; + case Race::Manticore: + return "Manticore"; + case Race::Unknown5: + return "Mantrap"; + case Race::Marionette: + return "Marionette"; + case Race::Mastruq: + return "Mastruq"; + case Race::MataMuram: + return "Mata Muram"; + case Race::Toolbox: + return "Medium Plant"; + case Race::Mephit: + return "Mephit"; + case Race::MerchantShip: + return "Merchant Ship"; + case Race::Mermaid: + return "Mermaid"; + case Race::Mimic: + return "Mimic"; + case Race::MiniPom: + return "Mini POM"; + case Race::Minotaur: + case Race::Minotaur2: + case Race::Minotaur3: + case Race::Minotaur4: + return "Minotaur"; + case Race::MithanielMarr: + return "Mithaniel Marr"; + case Race::MorellThule: + return "Morell Thule"; + case Race::Mosquito: + return "Mosquito"; + case Race::MouthOfInsanity: + return "Mouth of Insanity"; + case Race::Muddite: + return "Muddite"; + case Race::Mummy: + return "Mummy"; + case Race::MuramiteArmorPile: + return "Muramite Armor Pile"; + case Race::Murkglider: + return "Murkglider"; + case Race::MurkgliderEggSack: + return "Murkglider Egg Sac"; + case Race::Mutna: + return "Mutna"; + case Race::Nekhon: + return "Nekhon"; + case Race::Netherbian: + return "Netherbian"; + case Race::Nightmare: + return "Nightmare"; + case Race::NightmareGargoyle: + return "Nightmare Gargoyle"; + case Race::NightmareGoblin: + return "Nightmare Goblin"; + case Race::NightmareMephit: + return "Nightmare Mephit"; + case Race::Unicorn2: + case Race::Unicorn3: + return "Nightmare / Unicorn"; + case Race::NightmareWraith: + return "Nightmare Wraith"; + case Race::Nihil: + return "Nihil"; + case Race::Nilborien: + return "Nilborien"; + case Race::Noc: + return "Noc"; + case Race::Nymph: + return "Nymph"; + case Race::Ogre: + case Race::OggokCitizen: + return "Ogre"; + case Race::Ogre2: + return "Ogre NPC - Male"; + case Race::Orb: + return "Orb"; + case Race::Orc: + case Race::Orc2: + return "Orc"; + case Race::Othmir: + return "Othmir"; + case Race::Owlbear: + return "Owlbear"; + case Race::ParasiticScavenger: + return "Parasitic Scavenger"; + case Race::Pegasus: + case Race::Pegasus2: + case Race::Pegasus3: + return "Pegasus"; + case Race::Phoenix: + return "Phoenix"; + case Race::Piranha: + return "Piranha"; + case Race::OneArmedPirate: + case Race::SpiritmasterNadox: + case Race::BrokenSkullTaskmaster: + case Race::GnomePirate: + case Race::DarkElfPirate: + case Race::OgrePirate: + case Race::HumanPirate: + case Race::EruditePirate: + return "Pirate"; + case Race::PirateShip: + return "Pirate Ship"; + case Race::Pixie: + return "Pixie"; + case Race::PoisonFrog: + return "Poison Frog"; + case Race::Portal2: + return "Portal"; + case Race::PowderKeg: + return "Powder Keg"; + case Race::PressurePlate: + return "Pressure Plate"; + case Race::PufferSpore: + return "Puffer Spore"; + case Race::Puma: + case Race::Puma2: + case Race::Puma3: + return "Puma"; + case Race::Pusling: + return "Pusling"; + case Race::Pyrilen: + return "Pyrilen"; + case Race::Ratuk: + return "Ra`tuk"; + case Race::Rabbit: + return "Rabbit"; + case Race::StatueOfRallosZek: + case Race::NewRallosZek: + return "Rallos Zek"; + case Race::RallosOgre: + return "Rallos Zek Minion"; + case Race::Raptor: + case Race::Raptor2: + return "Raptor"; + case Race::RaptorMount: + return "Raptor Mount"; + case Race::GiantRat: + case Race::Rat: + return "Rat"; + case Race::RatMount: + return "Rat Mount"; + case Race::Ratman: + case Race::Ratman2: + return "Ratman"; + case Race::ReanimatedHand: + return "Reanimated Hand"; + case Race::Recuso: + return "Recuso"; + case Race::RegenerationPool: + return "Regeneration Pool"; + case Race::RelicCase: + return "Relic case "; + case Race::RhinoBeetle: + return "Rhino Beetle"; + case Race::Rhinoceros: + return "Rhinoceros"; + case Race::RobocopterOfZomm: + return "Robocopter of Zomm"; + case Race::RockPile: + return "Rock Pile"; + case Race::Rockhopper: + return "Rockhopper"; + case Race::RonnieTest: + return "Ronnie Test"; + case Race::RootTentacle: + return "Root Tentacle"; + case Race::RotDogMount: + return "Rot Dog Mount"; + case Race::RotDog: + return "Rotdog"; + case Race::Rotocopter: + return "Rotocopter"; + case Race::Rowboat: + return "Rowboat"; + case Race::RoyalGuard: + return "Royal Guard"; + case Race::RujarkianOrc: + case Race::MasterOrc: + return "Rujarkian Orc"; + case Race::RunedOrb: + return "Runed Orb"; + case Race::RunicSymbol: + return "Runic Symbol"; + case Race::Sabertooth: + return "Saber - toothed Cat"; + case Race::SaltpetterBomb: + return "Saltpetter Bomb"; + case Race::SandElf: + return "Sand Elf"; + case Race::Sandman: + return "Sandman"; + case Race::Sarnak: + case Race::Sarnak2: + return "Sarnak"; + case Race::SarnakGolem: + return "Sarnak Golem"; + case Race::SarnakSpirit: + return "Sarnak Spirit"; + case Race::Saryrn: + return "Saryrn"; + case Race::Satyr: + return "Satyr"; + case Race::ScaledWolf: + return "Scaled Wolf"; + case Race::Scarecrow: + case Race::Scarecrow2: + return "Scarecrow"; + case Race::ScarletCheetah: + return "Scarlet Cheetah"; + case Race::ScleraMount: + return "Sclera Mount"; + case Race::Scorpion: + case Race::IksarScorpion: + case Race::Scorpion2: + return "Scorpion"; + case Race::Scrykin: + return "Scrykin"; + case Race::SeaTurtle: + return "Sea Turtle"; + case Race::SeaHorse: + return "Seahorse"; + case Race::Selyrah: + return "Selyrah"; + case Race::SelyrahMount: + return "Selyrah Mount"; + case Race::LordInquisitorSeru: + return "Seru"; + case Race::ServantOfShadow: + return "Servant of Shadow"; + case Race::SessiloidMount: + return "Sessiloid Mount"; + case Race::Shade: + case Race::Shade2: + case Race::Shade3: + return "Shade"; + case Race::KhatiSha: + return "Shadel"; + case Race::ShamblingMound: + return "Shambling Mound"; + case Race::Shark: + return "Shark"; + case Race::Shiknar: + return "Shik'Nar"; + case Race::Shiliskin: + return "Shiliskin"; + case Race::Ship: + return "Ship"; + case Race::ShipInABottle: + return "Ship in a Bottle"; + case Race::Shissar: + case Race::Shissar2: + return "Shissar"; + case Race::Shrieker: + return "Shrieker"; + case Race::Siren: + case Race::Siren2: + return "Siren"; + case Race::SkeletalHorse: + return "Skeletal Horse"; + case Race::Skeleton: + case Race::Skeleton2: + case Race::Skeleton3: + return "Skeleton"; + case Race::Skunk: + return "Skunk"; + case Race::Skystrider: + return "Skystrider"; + case Race::Plant2: + return "Small Plant"; + case Race::GiantSnake: + case Race::Snake: + return "Snake"; + case Race::SnakeElemental: + return "Snake Elemental"; + case Race::SnowDervish: + return "Snow Dervish"; + case Race::SnowRabbit: + return "Snow Rabbit"; + case Race::Sokokar: + return "Sokokar"; + case Race::SokokarMount: + return "Sokokar Mount"; + case Race::SokokarMount2: + return "Sokokar(w saddle)"; + case Race::SolusekRo: + case Race::SolusekRo2: + return "Solusek Ro"; + case Race::SolusekRoGuard: + return "Solusek Ro Guard"; + case Race::SonicWolf: + return "Sonic Wolf"; + case Race::SoulDevourer: + return "Soul Devourer"; + case Race::Spectre: + case Race::Spectre2: + return "Spectre"; + case Race::SpellParticle: + return "Spell Particle 1"; + case Race::Sphinx: + case Race::Sphinx2: + return "Sphinx"; + case Race::GiantSpider: + case Race::Spider: + return "Spider"; + case Race::SpiderEggSack: + return "Spider Egg Sack"; + case Race::SpiderMount: + return "Spider Mount"; + case Race::SpiderQueen: + return "Spider Queen"; + case Race::SpikeTrap: + return "Spike Trap"; + case Race::SpiritWolf: + return "Spirit Wolf"; + case Race::Sporali: + return "Sporali"; + case Race::StoneJug: + return "Stone Jug"; + case Race::StonePylon: + return "Stone Pylon"; + case Race::StoneRing: + return "Stone Ring"; + case Race::StoneWorker: + case Race::StoneWorker2: + return "Stone Worker"; + case Race::Stonegrabber: + return "Stonegrabber"; + case Race::Stonemite: + return "Stonemite"; + case Race::Stormrider: + return "Stormrider"; + case Race::Succubus: + return "Succubus"; + case Race::Succulent: + return "Succulent"; + case Race::SullonZek: + return "Sullon Zek"; + case Race::Shadel: + return "Sun Revenant"; + case Race::Sunflower: + return "Sunflower"; + case Race::Swinetor: + return "Swinetor"; + case Race::Swordfish: + return "Swordfish"; + case Race::Synarcana: + return "Synarcana"; + case Race::Table: + return "Table"; + case Race::FroglokTadpole: + return "Tadpole"; + case Race::Taelosian: + return "Taelosian"; + case Race::WineCask: + return "Tall Plant"; + case Race::TallonZek: + return "Tallon Zek"; + case Race::Taneth: + return "Taneth"; + case Race::TarewMarr: + return "Tarew Marr"; + case Race::Tegi: + return "Tegi"; + case Race::TeleportMan: + return "Teleport Man"; + case Race::TeleportationStand: + return "Teleportation Stand"; + case Race::Telmira: + return "Telmira"; + case Race::TentacleTerror: + case Race::TentacleTerror2: + return "Tentacle Terror"; + case Race::TerrisThule: + return "Terris Thule"; + case Race::TestObject: + return "Test Object"; + case Race::Rathe: + return "The Rathe"; + case Race::TribunalNew: + return "The Tribunal"; + case Race::ThoughtHorror: + return "Thought Horror"; + case Race::Tiger: + return "Tiger"; + case Race::TinSoldier: + return "Tin Soldier"; + case Race::Plant: + return "Toolbox"; + case Race::TopiaryLion: + return "Topiary Lion"; + case Race::TopiaryLionMount: + return "Topiary Lion Mount"; + case Race::Tormentor: + return "Tormentor"; + case Race::Totem: + case Race::Totem2: + return "Totem"; + case Race::Trakanon: + return "Trakanon"; + case Race::Tranquilion: + return "Tranquilion"; + case Race::Treant: + case Race::Treant2: + case Race::Treant3: + return "Treant"; + case Race::Tribunal: + return "Tribunal"; + case Race::Triumvirate: + return "Triumvirate"; + case Race::Troll: + case Race::GrobbCitizen: + case Race::TrollCrewMember: + case Race::PirateDeckhand: + case Race::BrokenSkullPirate: + return "Troll"; + case Race::TrollZombie: + return "Troll Zombie"; + case Race::Trusik: + return "Trusik"; + case Race::Tsetsian: + return "Tsetsian"; + case Race::Tumbleweed: + return "Tumbleweed"; + case Race::Tunare: + return "Tunare"; + case Race::Turepta: + return "Turepta"; + case Race::Ukun: + return "Ukun"; + case Race::Ulthork: + return "Ulthork"; + case Race::UndeadChokidai: + return "Undead Chokidai"; + case Race::UndeadFootman: + return "Undead Footman"; + case Race::UndeadFroglok: + return "Undead Froglok"; + case Race::UndeadIksar: + return "Undead Iksar"; + case Race::UndeadKnight: + return "Undead Knight"; + case Race::UndeadSarnak: + return "Undead Sarnak"; + case Race::UndeadVeksar: + return "Undead Veksar"; + case Race::Underbulk: + return "Underbulk"; + case Race::Unicorn: + return "Unicorn"; + case Race::Doug: + case Race::MinorIllusion: + case Race::Tree: + case Race::Unknown: + case Race::Unknown2: + case Race::Unknown3: + case Race::Unknown4: + return "UNKNOWN RACE"; + case Race::VahShir: + case Race::VahShirKing: + return "Vah Shir"; + case Race::VahShirSkeleton: + return "Vah Shir Skeleton"; + case Race::VallonZek: + return "Vallon Zek"; + case Race::Valorian: + case Race::Valorian2: + return "Valorian"; + case Race::Vampire: + case Race::ElfVampire: + case Race::Vampire2: + case Race::VampireVolatalis: + case Race::UndeadVampire: + case Race::Vampire3: + case Race::MasterVampire: + case Race::Vampire4: + return "Vampire"; + case Race::Vase: + return "Vase"; + case Race::Vegerog: + return "Vegerog"; + case Race::Veksar: + case Race::Veksar2: + case Race::Veksar3: + return "Veksar"; + case Race::VenrilSathir: + return "Venril Sathir"; + case Race::VineMaw: + return "Vine Maw"; + case Race::Wagon: + return "Wagon"; + case Race::Walrus: + return "Walrus"; + case Race::WarBoar: + case Race::WarBoar2: + return "War Boar"; + case Race::WarWraith: + return "War Wraith"; + case Race::Wasp: + return "Wasp"; + case Race::WaterElemental: + case Race::WaterElemental2: + return "Water Elemental"; + case Race::WaterMephit: + return "Water Mephit"; + case Race::WaterSpout: + return "Water Spout"; + case Race::WeaponRack: + case Race::WeaponRack2: + return "Weapon Rack"; + case Race::Web: + return "Web"; + case Race::WeddingAltar: + return "Wedding Altar"; + case Race::WeddingArbor: + return "Wedding Arbor"; + case Race::WeddingFlowers: + return "Wedding Flowers"; + case Race::Wereorc: + return "Wereorc"; + case Race::Werewolf: + case Race::Werewolf2: + case Race::Werewolf3: + return "Werewolf"; + case Race::WetfangMinnow: + return "Wetfang Minnow"; + case Race::Whirligig: + return "Whirligig"; + case Race::WickerBasket: + return "Wicker Basket"; + case Race::Wisp: + return "Will - O - Wisp"; + case Race::StoneJug2: + case Race::WineCask2: + return "Wine Cask"; + case Race::Witheran: + case Race::Witheran2: + return "Witheran"; + case Race::Wolf: + case Race::WolfElemental: + case Race::Wolf2: + return "Wolf"; + case Race::WoodElf: + return "Wood Elf"; + case Race::Worg: + case Race::Worg2: + return "Worg"; + case Race::Worm: + return "Worm"; + case Race::Wretch: + return "Wretch"; + case Race::Wrulon: + case Race::Wrulon2: + return "Wrulon"; + case Race::Wurm: + case Race::Wurm2: + return "Wurm"; + case Race::WurmMount: + return "Wurm Mount"; + case Race::Wyvern: + case Race::Wyvern2: + return "Wyvern"; + case Race::Xalgoz: + return "Xalgoz"; + case Race::Xaric: + return "Xaric the Unspoken"; + case Race::Xegony: + return "Xegony"; + case Race::Yakkar: + return "Yakkar"; + case Race::Yeti: + return "Yeti"; + case Race::Zebuxoruk: + return "Zebuxoruk"; + case Race::ZebuxoruksCage: + return "Zebuxoruk's Cage"; + case Race::Zelniak: + return "Zelniak"; + case Race::Zombie: + case Race::Zombie2: + return "Zombie"; + default: + return "UNKNOWN RACE"; } } -const char* GetPlayerRaceName(uint32 player_race_value) +uint32 GetPlayerRaceValue(uint16 race_id) { - return GetRaceIDName(GetRaceIDFromPlayerRaceValue(player_race_value)); -} - -uint32 GetPlayerRaceValue(uint16 race_id) { switch (race_id) { - case HUMAN: - case BARBARIAN: - case ERUDITE: - case WOOD_ELF: - case HIGH_ELF: - case DARK_ELF: - case HALF_ELF: - case DWARF: - case TROLL: - case OGRE: - case HALFLING: - case GNOME: + case Race::Human: + case Race::Barbarian: + case Race::Erudite: + case Race::WoodElf: + case Race::HighElf: + case Race::DarkElf: + case Race::HalfElf: + case Race::Dwarf: + case Race::Troll: + case Race::Ogre: + case Race::Halfling: + case Race::Gnome: return race_id; - case IKSAR: - return PLAYER_RACE_IKSAR; - case VAHSHIR: - return PLAYER_RACE_VAHSHIR; - case FROGLOK: - case FROGLOK2: - return PLAYER_RACE_FROGLOK; - case DRAKKIN: - return PLAYER_RACE_DRAKKIN; + case Race::Iksar: + return RaceIndex::Iksar; + case Race::VahShir: + return RaceIndex::VahShir; + case Race::Froglok2: + return RaceIndex::Froglok; + case Race::Drakkin: + return RaceIndex::Drakkin; default: - return PLAYER_RACE_UNKNOWN; // watch + return Race::Doug; } } -uint16 GetPlayerRaceBit(uint16 race_id) { - switch (race_id) { - case HUMAN: - return PLAYER_RACE_HUMAN_BIT; - case BARBARIAN: - return PLAYER_RACE_BARBARIAN_BIT; - case ERUDITE: - return PLAYER_RACE_ERUDITE_BIT; - case WOOD_ELF: - return PLAYER_RACE_WOOD_ELF_BIT; - case HIGH_ELF: - return PLAYER_RACE_HIGH_ELF_BIT; - case DARK_ELF: - return PLAYER_RACE_DARK_ELF_BIT; - case HALF_ELF: - return PLAYER_RACE_HALF_ELF_BIT; - case DWARF: - return PLAYER_RACE_DWARF_BIT; - case TROLL: - return PLAYER_RACE_TROLL_BIT; - case OGRE: - return PLAYER_RACE_OGRE_BIT; - case HALFLING: - return PLAYER_RACE_HALFLING_BIT; - case GNOME: - return PLAYER_RACE_GNOME_BIT; - case IKSAR: - return PLAYER_RACE_IKSAR_BIT; - case VAHSHIR: - return PLAYER_RACE_VAHSHIR_BIT; - case FROGLOK: - return PLAYER_RACE_FROGLOK_BIT; - case DRAKKIN: - return PLAYER_RACE_DRAKKIN_BIT; - default: - return PLAYER_RACE_UNKNOWN_BIT; - } -} - -uint16 GetRaceIDFromPlayerRaceValue(uint32 player_race_value) { - switch (player_race_value) { - case PLAYER_RACE_HUMAN: - case PLAYER_RACE_BARBARIAN: - case PLAYER_RACE_ERUDITE: - case PLAYER_RACE_WOOD_ELF: - case PLAYER_RACE_HIGH_ELF: - case PLAYER_RACE_DARK_ELF: - case PLAYER_RACE_HALF_ELF: - case PLAYER_RACE_DWARF: - case PLAYER_RACE_TROLL: - case PLAYER_RACE_OGRE: - case PLAYER_RACE_HALFLING: - case PLAYER_RACE_GNOME: - return player_race_value; - case PLAYER_RACE_IKSAR: - return IKSAR; - case PLAYER_RACE_VAHSHIR: - return VAHSHIR; - case PLAYER_RACE_FROGLOK: - return FROGLOK; - case PLAYER_RACE_DRAKKIN: - return DRAKKIN; - default: - return PLAYER_RACE_UNKNOWN; // watch - } -} - -uint16 GetRaceIDFromPlayerRaceBit(uint32 player_race_bit) +uint16 GetPlayerRaceBit(uint16 race_id) { - switch (player_race_bit) { - case PLAYER_RACE_HUMAN_BIT: - return HUMAN; - case PLAYER_RACE_BARBARIAN_BIT: - return BARBARIAN; - case PLAYER_RACE_ERUDITE_BIT: - return ERUDITE; - case PLAYER_RACE_WOOD_ELF_BIT: - return WOOD_ELF; - case PLAYER_RACE_HIGH_ELF_BIT: - return HIGH_ELF; - case PLAYER_RACE_DARK_ELF_BIT: - return DARK_ELF; - case PLAYER_RACE_HALF_ELF_BIT: - return HALF_ELF; - case PLAYER_RACE_DWARF_BIT: - return DWARF; - case PLAYER_RACE_TROLL_BIT: - return TROLL; - case PLAYER_RACE_OGRE_BIT: - return OGRE; - case PLAYER_RACE_HALFLING_BIT: - return HALFLING; - case PLAYER_RACE_GNOME_BIT: - return GNOME; - case PLAYER_RACE_IKSAR_BIT: - return IKSAR; - case PLAYER_RACE_VAHSHIR_BIT: - return VAHSHIR; - case PLAYER_RACE_FROGLOK_BIT: - return FROGLOK; - case PLAYER_RACE_DRAKKIN_BIT: - return DRAKKIN; - default: - return PLAYER_RACE_UNKNOWN; // watch + switch (race_id) { + case Race::Human: + return RaceBitmask::Human; + case Race::Barbarian: + return RaceBitmask::Barbarian; + case Race::Erudite: + return RaceBitmask::Erudite; + case Race::WoodElf: + return RaceBitmask::WoodElf; + case Race::HighElf: + return RaceBitmask::HighElf; + case Race::DarkElf: + return RaceBitmask::DarkElf; + case Race::HalfElf: + return RaceBitmask::HalfElf; + case Race::Dwarf: + return RaceBitmask::Dwarf; + case Race::Troll: + return RaceBitmask::Troll; + case Race::Ogre: + return RaceBitmask::Ogre; + case Race::Halfling: + return RaceBitmask::Halfling; + case Race::Gnome: + return RaceBitmask::Gnome; + case Race::Iksar: + return RaceBitmask::Iksar; + case Race::VahShir: + return RaceBitmask::VahShir; + case Race::Froglok2: + return RaceBitmask::Froglok; + case Race::Drakkin: + return RaceBitmask::Drakkin; + default: + return RaceBitmask::Unknown; + } +} + +uint16 GetRaceIDFromPlayerRaceValue(uint32 player_race_value) +{ + switch (player_race_value) { + case RaceIndex::Human: + case RaceIndex::Barbarian: + case RaceIndex::Erudite: + case RaceIndex::WoodElf: + case RaceIndex::HighElf: + case RaceIndex::DarkElf: + case RaceIndex::HalfElf: + case RaceIndex::Dwarf: + case RaceIndex::Troll: + case RaceIndex::Ogre: + case RaceIndex::Halfling: + case RaceIndex::Gnome: + return player_race_value; + case RaceIndex::Iksar: + return Race::Iksar; + case RaceIndex::VahShir: + return Race::VahShir; + case RaceIndex::Froglok: + return Race::Froglok2; + case RaceIndex::Drakkin: + return Race::Drakkin; + default: + return Race::Doug; } } @@ -1605,634 +1514,480 @@ float GetRaceGenderDefaultHeight(int race, int gender) return male_height[race]; } -// PlayerAppearance prep -#define HUMAN_MALE ((HUMAN << 8) | Gender::Male) -#define HUMAN_FEMALE ((HUMAN << 8) | Gender::Female) -#define BARBARIAN_MALE ((BARBARIAN << 8) | Gender::Male) -#define BARBARIAN_FEMALE ((BARBARIAN << 8) | Gender::Female) -#define ERUDITE_MALE ((ERUDITE << 8) | Gender::Male) -#define ERUDITE_FEMALE ((ERUDITE << 8) | Gender::Female) -#define WOOD_ELF_MALE ((WOOD_ELF << 8) | Gender::Male) -#define WOOD_ELF_FEMALE ((WOOD_ELF << 8) | Gender::Female) -#define HIGH_ELF_MALE ((HIGH_ELF << 8) | Gender::Male) -#define HIGH_ELF_FEMALE ((HIGH_ELF << 8) | Gender::Female) -#define DARK_ELF_MALE ((DARK_ELF << 8) | Gender::Male) -#define DARK_ELF_FEMALE ((DARK_ELF << 8) | Gender::Female) -#define HALF_ELF_MALE ((HALF_ELF << 8) | Gender::Male) -#define HALF_ELF_FEMALE ((HALF_ELF << 8) | Gender::Female) -#define DWARF_MALE ((DWARF << 8) | Gender::Male) -#define DWARF_FEMALE ((DWARF << 8) | Gender::Female) -#define TROLL_MALE ((TROLL << 8) | Gender::Male) -#define TROLL_FEMALE ((TROLL << 8) | Gender::Female) -#define OGRE_MALE ((OGRE << 8) | Gender::Male) -#define OGRE_FEMALE ((OGRE << 8) | Gender::Female) -#define HALFLING_MALE ((HALFLING << 8) | Gender::Male) -#define HALFLING_FEMALE ((HALFLING << 8) | Gender::Female) -#define GNOME_MALE ((GNOME << 8) | Gender::Male) -#define GNOME_FEMALE ((GNOME << 8) | Gender::Female) -#define IKSAR_MALE ((IKSAR << 8) | Gender::Male) -#define IKSAR_FEMALE ((IKSAR << 8) | Gender::Female) -#define VAHSHIR_MALE ((VAHSHIR << 8) | Gender::Male) -#define VAHSHIR_FEMALE ((VAHSHIR << 8) | Gender::Female) -#define FROGLOK_MALE ((FROGLOK << 8) | Gender::Male) -#define FROGLOK_FEMALE ((FROGLOK << 8) | Gender::Female) -#define DRAKKIN_MALE ((DRAKKIN << 8) | Gender::Male) -#define DRAKKIN_FEMALE ((DRAKKIN << 8) | Gender::Female) +#define GetRaceGenderMask(race_id, gender_id) (((int)race_id << 8) | gender_id) -#define BINDRG(r, g) (((int)r << 8) | g) - - -bool PlayerAppearance::IsValidBeard(uint16 race_id, uint8 gender_id, uint8 beard_value, bool use_luclin) +bool RaceAppearance::IsValidBeard(uint16 race_id, uint8 gender_id, uint8 beard_value, bool use_luclin) { - if (beard_value == 0xFF) + if (beard_value == std::numeric_limits::max()) { return true; + } if (use_luclin) { - switch (BINDRG(race_id, gender_id)) { - case DWARF_FEMALE: - if (beard_value <= 1) - return true; - break; - case HIGH_ELF_MALE: - case DARK_ELF_MALE: - case HALF_ELF_MALE: - case DRAKKIN_FEMALE: - if (beard_value <= 3) - return true; - break; - case HUMAN_MALE: - case BARBARIAN_MALE: - case ERUDITE_MALE: - case DWARF_MALE: - case HALFLING_MALE: - case GNOME_MALE: - if (beard_value <= 5) - return true; - break; - case DRAKKIN_MALE: - if (beard_value <= 11) - return true; - break; - default: - break; + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DwarfFemale: + if (beard_value <= 1) { + return true; + } + + break; + case RaceAppearance::HighElfMale: + case RaceAppearance::DarkElfMale: + case RaceAppearance::HalfElfMale: + case RaceAppearance::DrakkinFemale: + if (beard_value <= 3) { + return true; + } + + break; + case RaceAppearance::HumanMale: + case RaceAppearance::BarbarianMale: + case RaceAppearance::EruditeMale: + case RaceAppearance::DwarfMale: + case RaceAppearance::HalflingMale: + case RaceAppearance::GnomeMale: + if (beard_value <= 5) { + return true; + } + + break; + case RaceAppearance::DrakkinMale: + if (beard_value <= 11) { + return true; + } + + break; + default: + break; } + return false; - } - else { - switch (BINDRG(race_id, gender_id)) { - case DRAKKIN_FEMALE: - if (beard_value <= 3) - return true; - break; - case DRAKKIN_MALE: - if (beard_value <= 11) - return true; - break; - default: - break; + } else { + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DrakkinFemale: + if (beard_value <= 3) { + return true; + } + + break; + case RaceAppearance::DrakkinMale: + if (beard_value <= 11) { + return true; + } + + break; + default: + break; } + return false; } } -bool PlayerAppearance::IsValidBeardColor(uint16 race_id, uint8 gender_id, uint8 beard_color_value, bool use_luclin) +bool RaceAppearance::IsValidBeardColor(uint16 race_id, uint8 gender_id, uint8 beard_color_value, bool use_luclin) { - if (beard_color_value == 0xFF) - return true; - - switch (BINDRG(race_id, gender_id)) { - case GNOME_MALE: - if (beard_color_value <= 24) - return true; - break; - case HUMAN_MALE: - case BARBARIAN_MALE: - case ERUDITE_MALE: - case HALF_ELF_MALE: - case DWARF_MALE: - case DWARF_FEMALE: - case HALFLING_MALE: - if (beard_color_value <= 19) - return true; - break; - case DARK_ELF_MALE: - if (beard_color_value >= 13 && beard_color_value <= 18) - return true; - break; - case HIGH_ELF_MALE: - if (beard_color_value <= 14) - return true; - break; - case FROGLOK_MALE: - case FROGLOK_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (beard_color_value <= 3) - return true; - break; - default: - break; - } - return false; -} - -bool PlayerAppearance::IsValidDetail(uint16 race_id, uint8 gender_id, uint32 detail_value, bool use_luclin) -{ - if (detail_value == 0xFFFFFFFF) + if (beard_color_value == std::numeric_limits::max()) { return true; - - switch (BINDRG(race_id, gender_id)) { - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (detail_value <= 7) - return true; - break; - default: - break; } + + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::GnomeMale: + if (beard_color_value <= 24) { + return true; + } + + break; + case RaceAppearance::HumanMale: + case RaceAppearance::BarbarianMale: + case RaceAppearance::EruditeMale: + case RaceAppearance::HalfElfMale: + case RaceAppearance::DwarfMale: + case RaceAppearance::DwarfFemale: + case RaceAppearance::HalflingMale: + if (beard_color_value <= 19) { + return true; + } + + break; + case RaceAppearance::DarkElfMale: + if (EQ::ValueWithin(beard_color_value, 13, 18)) { + return true; + } + + break; + case RaceAppearance::HighElfMale: + if (beard_color_value <= 14) { + return true; + } + + break; + case RaceAppearance::FroglokMale: + case RaceAppearance::FroglokFemale: + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (beard_color_value <= 3) { + return true; + } + + break; + default: + break; + } + return false; } -bool PlayerAppearance::IsValidEyeColor(uint16 race_id, uint8 gender_id, uint8 eye_color_value, bool use_luclin) +bool RaceAppearance::IsValidDetail(uint16 race_id, uint8 gender_id, uint32 detail_value, bool use_luclin) { - return true; // need valid criteria - - switch (BINDRG(race_id, gender_id)) { - case HUMAN_MALE: - case HUMAN_FEMALE: - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case ERUDITE_MALE: - case ERUDITE_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case OGRE_MALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - case GNOME_MALE: - case GNOME_FEMALE: - case IKSAR_MALE: - case IKSAR_FEMALE: - case VAHSHIR_MALE: - case VAHSHIR_FEMALE: - if (eye_color_value <= 9) - return true; - break; - case TROLL_MALE: - case TROLL_FEMALE: - if (eye_color_value <= 10) - return true; - break; - case FROGLOK_MALE: - case FROGLOK_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (eye_color_value <= 11) - return true; - break; - default: - break; - } - return false; -} - -bool PlayerAppearance::IsValidFace(uint16 race_id, uint8 gender_id, uint8 face_value, bool use_luclin) -{ - if (face_value == 0xFF) + if (detail_value == std::numeric_limits::max()) { return true; - - switch (BINDRG(race_id, gender_id)) { - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (face_value <= 6) - return true; - break; - case HUMAN_MALE: - case HUMAN_FEMALE: - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case ERUDITE_MALE: - case ERUDITE_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case TROLL_MALE: - case TROLL_FEMALE: - case OGRE_MALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - case GNOME_MALE: - case GNOME_FEMALE: - case IKSAR_MALE: - case IKSAR_FEMALE: - case VAHSHIR_MALE: - case VAHSHIR_FEMALE: - if (face_value <= 7) - return true; - break; - case FROGLOK_MALE: - case FROGLOK_FEMALE: - if (face_value <= 9) - return true; - break; - default: - break; } + + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (detail_value <= 7) { + return true; + } + + break; + default: + break; + } + return false; } -bool PlayerAppearance::IsValidHair(uint16 race_id, uint8 gender_id, uint8 hair_value, bool use_luclin) +bool RaceAppearance::IsValidEyeColor(uint16 race_id, uint8 gender_id, uint8 eye_color_value, bool use_luclin) { - if (hair_value == 0xFF) + if (eye_color_value == std::numeric_limits::max()) { return true; + } + + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::HumanMale: + case RaceAppearance::HumanFemale: + case RaceAppearance::BarbarianMale: + case RaceAppearance::BarbarianFemale: + case RaceAppearance::EruditeMale: + case RaceAppearance::EruditeFemale: + case RaceAppearance::WoodElfMale: + case RaceAppearance::WoodElfFemale: + case RaceAppearance::HighElfMale: + case RaceAppearance::HighElfFemale: + case RaceAppearance::DarkElfMale: + case RaceAppearance::DarkElfFemale: + case RaceAppearance::HalfElfMale: + case RaceAppearance::HalfElfFemale: + case RaceAppearance::DwarfMale: + case RaceAppearance::DwarfFemale: + case RaceAppearance::OgreMale: + case RaceAppearance::OgreFemale: + case RaceAppearance::HalflingMale: + case RaceAppearance::HalflingFemale: + case RaceAppearance::GnomeMale: + case RaceAppearance::GnomeFemale: + case RaceAppearance::IksarMale: + case RaceAppearance::IksarFemale: + case RaceAppearance::VahShirMale: + case RaceAppearance::VahShirFemale: + if (eye_color_value <= 9) { + return true; + } + + break; + case RaceAppearance::TrollMale: + case RaceAppearance::TrollFemale: + if (eye_color_value <= 10) { + return true; + } + + break; + case RaceAppearance::FroglokMale: + case RaceAppearance::FroglokFemale: + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (eye_color_value <= 11) { + return true; + } + + break; + default: + break; + } + + return false; +} + +bool RaceAppearance::IsValidFace(uint16 race_id, uint8 gender_id, uint8 face_value, bool use_luclin) +{ + if (face_value == std::numeric_limits::max()) { + return true; + } + + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (face_value <= 6) { + return true; + } + + break; + case RaceAppearance::HumanMale: + case RaceAppearance::HumanFemale: + case RaceAppearance::BarbarianMale: + case RaceAppearance::BarbarianFemale: + case RaceAppearance::EruditeMale: + case RaceAppearance::EruditeFemale: + case RaceAppearance::WoodElfMale: + case RaceAppearance::WoodElfFemale: + case RaceAppearance::HighElfMale: + case RaceAppearance::HighElfFemale: + case RaceAppearance::DarkElfMale: + case RaceAppearance::DarkElfFemale: + case RaceAppearance::HalfElfMale: + case RaceAppearance::HalfElfFemale: + case RaceAppearance::DwarfMale: + case RaceAppearance::DwarfFemale: + case RaceAppearance::TrollMale: + case RaceAppearance::TrollFemale: + case RaceAppearance::OgreMale: + case RaceAppearance::OgreFemale: + case RaceAppearance::HalflingMale: + case RaceAppearance::HalflingFemale: + case RaceAppearance::GnomeMale: + case RaceAppearance::GnomeFemale: + case RaceAppearance::IksarMale: + case RaceAppearance::IksarFemale: + case RaceAppearance::VahShirMale: + case RaceAppearance::VahShirFemale: + if (face_value <= 7) { + return true; + } + + break; + case RaceAppearance::FroglokMale: + case RaceAppearance::FroglokFemale: + if (face_value <= 9) { + return true; + } + + break; + default: + break; + } + + return false; +} + +bool RaceAppearance::IsValidHair(uint16 race_id, uint8 gender_id, uint8 hair_value, bool use_luclin) +{ + if (hair_value == std::numeric_limits::max()) { + return true; + } if (use_luclin) { - switch (BINDRG(race_id, gender_id)) { - case HUMAN_MALE: - case HUMAN_FEMALE: - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case TROLL_FEMALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - case GNOME_MALE: - case GNOME_FEMALE: - if (hair_value <= 3) - return true; - break; - case ERUDITE_MALE: - if (hair_value <= 5) - return true; - break; - case DRAKKIN_FEMALE: - if (hair_value <= 7) - return true; - break; - case ERUDITE_FEMALE: - case DRAKKIN_MALE: - if (hair_value <= 8) - return true; - break; - default: - break; + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::HumanMale: + case RaceAppearance::HumanFemale: + case RaceAppearance::BarbarianMale: + case RaceAppearance::BarbarianFemale: + case RaceAppearance::WoodElfMale: + case RaceAppearance::WoodElfFemale: + case RaceAppearance::HighElfMale: + case RaceAppearance::HighElfFemale: + case RaceAppearance::DarkElfMale: + case RaceAppearance::DarkElfFemale: + case RaceAppearance::HalfElfMale: + case RaceAppearance::HalfElfFemale: + case RaceAppearance::DwarfMale: + case RaceAppearance::DwarfFemale: + case RaceAppearance::TrollFemale: + case RaceAppearance::OgreFemale: + case RaceAppearance::HalflingMale: + case RaceAppearance::HalflingFemale: + case RaceAppearance::GnomeMale: + case RaceAppearance::GnomeFemale: + if (hair_value <= 3) { + return true; + } + + break; + case RaceAppearance::EruditeMale: + if (hair_value <= 5) { + return true; + } + + break; + case RaceAppearance::DrakkinFemale: + if (hair_value <= 7) { + return true; + } + + break; + case RaceAppearance::EruditeFemale: + case RaceAppearance::DrakkinMale: + if (hair_value <= 8) { + return true; + } + + break; + default: + break; } + return false; - } - else { - switch (BINDRG(race_id, gender_id)) { - case DRAKKIN_FEMALE: - if (hair_value <= 7) - return true; - break; - case DRAKKIN_MALE: - if (hair_value <= 8) - return true; - break; - default: - break; + } else { + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DrakkinFemale: + if (hair_value <= 7) { + return true; + } + + break; + case RaceAppearance::DrakkinMale: + if (hair_value <= 8) { + return true; + } + + break; + default: + break; } + return false; } } -bool PlayerAppearance::IsValidHairColor(uint16 race_id, uint8 gender_id, uint8 hair_color_value, bool use_luclin) +bool RaceAppearance::IsValidHairColor(uint16 race_id, uint8 gender_id, uint8 hair_color_value, bool use_luclin) { - if (hair_color_value == 0xFF) + if (hair_color_value == std::numeric_limits::max()) { return true; - - switch (BINDRG(race_id, gender_id)) { - case GNOME_MALE: - case GNOME_FEMALE: - if (hair_color_value <= 24) - return true; - break; - case TROLL_FEMALE: - case OGRE_FEMALE: - if (hair_color_value <= 23) - return true; - break; - case HUMAN_MALE: - case HUMAN_FEMALE: - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - if (hair_color_value <= 19) - return true; - break; - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - if (hair_color_value >= 13 && hair_color_value <= 18) - return true; - break; - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - if (hair_color_value <= 14) - return true; - break; - case FROGLOK_MALE: - case FROGLOK_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (hair_color_value <= 3) - return true; - break; - default: - break; } + + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::GnomeMale: + case RaceAppearance::GnomeFemale: + if (hair_color_value <= 24) { + return true; + } + + break; + case RaceAppearance::TrollFemale: + case RaceAppearance::OgreFemale: + if (hair_color_value <= 23) { + return true; + } + + break; + case RaceAppearance::HumanMale: + case RaceAppearance::HumanFemale: + case RaceAppearance::BarbarianMale: + case RaceAppearance::BarbarianFemale: + case RaceAppearance::WoodElfMale: + case RaceAppearance::WoodElfFemale: + case RaceAppearance::HalfElfMale: + case RaceAppearance::HalfElfFemale: + case RaceAppearance::DwarfMale: + case RaceAppearance::DwarfFemale: + case RaceAppearance::HalflingMale: + case RaceAppearance::HalflingFemale: + if (hair_color_value <= 19) { + return true; + } + + break; + case RaceAppearance::DarkElfMale: + case RaceAppearance::DarkElfFemale: + if (EQ::ValueWithin(hair_color_value, 13, 18)) { + return true; + } + + break; + case RaceAppearance::HighElfMale: + case RaceAppearance::HighElfFemale: + if (hair_color_value <= 14) { + return true; + } + + break; + case RaceAppearance::FroglokMale: + case RaceAppearance::FroglokFemale: + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (hair_color_value <= 3) { + return true; + } + + break; + default: + break; + } + return false; } -bool PlayerAppearance::IsValidHead(uint16 race_id, uint8 gender_id, uint8 head_value, bool use_luclin) +bool RaceAppearance::IsValidHeritage(uint16 race_id, uint8 gender_id, uint32 heritage_value, bool use_luclin) { - if (head_value == 0xFF) + if (heritage_value == std::numeric_limits::max()) { return true; + } - if (use_luclin) { - switch (BINDRG(race_id, gender_id)) { - case HUMAN_MALE: - case HUMAN_FEMALE: - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case TROLL_MALE: - case TROLL_FEMALE: - case OGRE_MALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - case GNOME_MALE: - case GNOME_FEMALE: - case IKSAR_MALE: - case IKSAR_FEMALE: - case VAHSHIR_MALE: - case VAHSHIR_FEMALE: - case FROGLOK_MALE: - case FROGLOK_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (head_value <= 3) - return true; - break; - case ERUDITE_MALE: - case ERUDITE_FEMALE: - if (head_value <= 4) + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (heritage_value <= 7) { return true; + } + break; default: break; - } - return false; } - else { - switch (BINDRG(race_id, gender_id)) { - case HUMAN_MALE: - case HUMAN_FEMALE: - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case ERUDITE_MALE: - case ERUDITE_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case TROLL_MALE: - case TROLL_FEMALE: - case OGRE_MALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - case IKSAR_MALE: - case IKSAR_FEMALE: - case VAHSHIR_MALE: - case VAHSHIR_FEMALE: - case FROGLOK_MALE: - case FROGLOK_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (head_value <= 3) - return true; - break; - case GNOME_MALE: - case GNOME_FEMALE: - if (head_value <= 4) - return true; - break; - default: - break; - } - return false; - } -} -bool PlayerAppearance::IsValidHeritage(uint16 race_id, uint8 gender_id, uint32 heritage_value, bool use_luclin) -{ - if (heritage_value == 0xFFFFFFFF) - return true; - - switch (BINDRG(race_id, gender_id)) { - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (heritage_value <= 7) // > 5 seems to jumble other features..else, some heritages have 'specialized' features - return true; - break; - default: - break; - } return false; } -bool PlayerAppearance::IsValidTattoo(uint16 race_id, uint8 gender_id, uint32 tattoo_value, bool use_luclin) +bool RaceAppearance::IsValidTattoo(uint16 race_id, uint8 gender_id, uint32 tattoo_value, bool use_luclin) { - if (tattoo_value == 0xFFFFFFFF) + if (tattoo_value == std::numeric_limits::max()) { return true; - - switch (BINDRG(race_id, gender_id)) { - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if (tattoo_value <= 7) - return true; - break; - default: - break; } + + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::DrakkinMale: + case RaceAppearance::DrakkinFemale: + if (tattoo_value <= 7) { + return true; + } + + break; + default: + break; + } + return false; } -bool PlayerAppearance::IsValidTexture(uint16 race_id, uint8 gender_id, uint8 texture_value, bool use_luclin) +bool RaceAppearance::IsValidWoad(uint16 race_id, uint8 gender_id, uint8 woad_value, bool use_luclin) { - if (texture_value == 0xFF) + if (woad_value == std::numeric_limits::max()) { return true; + } if (use_luclin) { - switch (BINDRG(race_id, gender_id)) { - case HUMAN_MALE: - case HUMAN_FEMALE: - case IKSAR_MALE: - case IKSAR_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if ((texture_value >= 10 && texture_value <= 16) || texture_value <= 4) - return true; - break; - case ERUDITE_MALE: - case ERUDITE_FEMALE: - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case GNOME_MALE: - case GNOME_FEMALE: - case FROGLOK_MALE: - case FROGLOK_FEMALE: - if ((texture_value >= 10 && texture_value <= 16) || texture_value <= 3) - return true; - break; - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case TROLL_MALE: - case TROLL_FEMALE: - case OGRE_MALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - case VAHSHIR_MALE: - case VAHSHIR_FEMALE: - if (texture_value <= 3) - return true; - break; - default: - break; - } - return false; - } - else { - switch (BINDRG(race_id, gender_id)) { - case HUMAN_MALE: - case HUMAN_FEMALE: - case ERUDITE_MALE: - case ERUDITE_FEMALE: - case DRAKKIN_MALE: - case DRAKKIN_FEMALE: - if ((texture_value >= 10 && texture_value <= 16) || texture_value <= 4) - return true; - break; - case HIGH_ELF_MALE: - case HIGH_ELF_FEMALE: - case DARK_ELF_MALE: - case DARK_ELF_FEMALE: - case GNOME_MALE: - case GNOME_FEMALE: - case FROGLOK_MALE: - case FROGLOK_FEMALE: - if ((texture_value >= 10 && texture_value <= 16) || texture_value <= 3) - return true; - break; - case VAHSHIR_MALE: - case VAHSHIR_FEMALE: - if (texture_value == 50 || texture_value <= 3) - return true; - break; - case IKSAR_MALE: - case IKSAR_FEMALE: - if (texture_value == 10 || texture_value <= 4) - return true; - break; - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - case WOOD_ELF_MALE: - case WOOD_ELF_FEMALE: - case HALF_ELF_MALE: - case HALF_ELF_FEMALE: - case DWARF_MALE: - case DWARF_FEMALE: - case TROLL_MALE: - case TROLL_FEMALE: - case OGRE_MALE: - case OGRE_FEMALE: - case HALFLING_MALE: - case HALFLING_FEMALE: - if (texture_value <= 3) - return true; - break; - default: - break; - } - return false; - } -} + switch (GetRaceGenderMask(race_id, gender_id)) { + case RaceAppearance::BarbarianMale: + case RaceAppearance::BarbarianFemale: + if (woad_value <= 8) { + return true; + } -bool PlayerAppearance::IsValidWoad(uint16 race_id, uint8 gender_id, uint8 woad_value, bool use_luclin) -{ - if (woad_value == 0xFF) - return true; - - if (use_luclin) { - switch (BINDRG(race_id, gender_id)) { - case BARBARIAN_MALE: - case BARBARIAN_FEMALE: - if (woad_value <= 8) - return true; - break; - default: - break; + break; + default: + break; } } + return false; } diff --git a/common/races.h b/common/races.h index b3f6988c5..3d9d9f8d3 100644 --- a/common/races.h +++ b/common/races.h @@ -21,103 +21,7 @@ #include "../common/types.h" #include -namespace Gender { - constexpr uint8 Male = 0; - constexpr uint8 Female = 1; - constexpr uint8 Neuter = 2; -} - -//theres a big list straight from the client below. - -#define HUMAN 1 -#define BARBARIAN 2 -#define ERUDITE 3 -#define WOOD_ELF 4 -#define HIGH_ELF 5 -#define DARK_ELF 6 -#define HALF_ELF 7 -#define DWARF 8 -#define TROLL 9 -#define OGRE 10 -#define HALFLING 11 -#define GNOME 12 -#define WEREWOLF 14 -#define WOLF 42 -#define BEAR 43 -#define SKELETON 60 -#define TIGER 63 -#define ELEMENTAL 75 -#define ALLIGATOR 91 -#define OGGOK_CITIZEN 93 -#define EYE_OF_ZOMM 108 -#define WOLF_ELEMENTAL 120 -#define INVISIBLE_MAN 127 -#define IKSAR 128 -#define VAHSHIR 130 -#define CONTROLLED_BOAT 141 -#define MINOR_ILL_OBJ 142 -#define TREE 143 -#define IKSAR_SKELETON 161 -#define FROGLOK 330 -// TODO: check all clients for (BYTE) usage of '/who all' class and remove FROGLOK2, if possible (330 - 74 = 256 .. WORD->BYTE conversion loss...) -#define FROGLOK2 74 // Not sure why /who all reports race as 74 for frogloks -#define FAIRY 473 -#define DRAKKIN 522 // 32768 -#define EMU_RACE_NPC 131069 // was 65533 -#define EMU_RACE_PET 131070 // was 65534 -#define EMU_RACE_UNKNOWN 131071 // was 65535 - - -// player race values -#define PLAYER_RACE_UNKNOWN 0 -#define PLAYER_RACE_HUMAN 1 -#define PLAYER_RACE_BARBARIAN 2 -#define PLAYER_RACE_ERUDITE 3 -#define PLAYER_RACE_WOOD_ELF 4 -#define PLAYER_RACE_HIGH_ELF 5 -#define PLAYER_RACE_DARK_ELF 6 -#define PLAYER_RACE_HALF_ELF 7 -#define PLAYER_RACE_DWARF 8 -#define PLAYER_RACE_TROLL 9 -#define PLAYER_RACE_OGRE 10 -#define PLAYER_RACE_HALFLING 11 -#define PLAYER_RACE_GNOME 12 -#define PLAYER_RACE_IKSAR 13 -#define PLAYER_RACE_VAHSHIR 14 -#define PLAYER_RACE_FROGLOK 15 -#define PLAYER_RACE_DRAKKIN 16 - -#define PLAYER_RACE_COUNT 16 - - -#define PLAYER_RACE_EMU_NPC 17 -#define PLAYER_RACE_EMU_PET 18 -#define PLAYER_RACE_EMU_COUNT 19 - - -// player race bits -#define PLAYER_RACE_UNKNOWN_BIT 0 -#define PLAYER_RACE_HUMAN_BIT 1 -#define PLAYER_RACE_BARBARIAN_BIT 2 -#define PLAYER_RACE_ERUDITE_BIT 4 -#define PLAYER_RACE_WOOD_ELF_BIT 8 -#define PLAYER_RACE_HIGH_ELF_BIT 16 -#define PLAYER_RACE_DARK_ELF_BIT 32 -#define PLAYER_RACE_HALF_ELF_BIT 64 -#define PLAYER_RACE_DWARF_BIT 128 -#define PLAYER_RACE_TROLL_BIT 256 -#define PLAYER_RACE_OGRE_BIT 512 -#define PLAYER_RACE_HALFLING_BIT 1024 -#define PLAYER_RACE_GNOME_BIT 2048 -#define PLAYER_RACE_IKSAR_BIT 4096 -#define PLAYER_RACE_VAHSHIR_BIT 8192 -#define PLAYER_RACE_FROGLOK_BIT 16384 -#define PLAYER_RACE_DRAKKIN_BIT 32768 - -#define PLAYER_RACE_ALL_MASK 65535 - const char* GetRaceIDName(uint16 race_id); -const char* GetPlayerRaceName(uint32 player_race_value); const char* GetGenderName(uint32 gender_id); bool IsPlayerRace(uint16 race_id); @@ -127,25 +31,13 @@ uint32 GetPlayerRaceValue(uint16 race_id); uint16 GetPlayerRaceBit(uint16 race_id); uint16 GetRaceIDFromPlayerRaceValue(uint32 player_race_value); -uint16 GetRaceIDFromPlayerRaceBit(uint32 player_race_bit); float GetRaceGenderDefaultHeight(int race, int gender); -// player race-/gender-based model feature validators -namespace PlayerAppearance -{ - bool IsValidBeard(uint16 race_id, uint8 gender_id, uint8 beard_value, bool use_luclin = true); - bool IsValidBeardColor(uint16 race_id, uint8 gender_id, uint8 beard_color_value, bool use_luclin = true); - bool IsValidDetail(uint16 race_id, uint8 gender_id, uint32 detail_value, bool use_luclin = true); - bool IsValidEyeColor(uint16 race_id, uint8 gender_id, uint8 eye_color_value, bool use_luclin = true); - bool IsValidFace(uint16 race_id, uint8 gender_id, uint8 face_value, bool use_luclin = true); - bool IsValidHair(uint16 race_id, uint8 gender_id, uint8 hair_value, bool use_luclin = true); - bool IsValidHairColor(uint16 race_id, uint8 gender_id, uint8 hair_color_value, bool use_luclin = true); - bool IsValidHead(uint16 race_id, uint8 gender_id, uint8 head_value, bool use_luclin = true); - bool IsValidHeritage(uint16 race_id, uint8 gender_id, uint32 heritage_value, bool use_luclin = true); - bool IsValidTattoo(uint16 race_id, uint8 gender_id, uint32 tattoo_value, bool use_luclin = true); - bool IsValidTexture(uint16 race_id, uint8 gender_id, uint8 texture_value, bool use_luclin = true); - bool IsValidWoad(uint16 race_id, uint8 gender_id, uint8 woad_value, bool use_luclin = true); +namespace Gender { + constexpr uint8 Male = 0; + constexpr uint8 Female = 1; + constexpr uint8 Neuter = 2; } namespace Race { @@ -884,8 +776,92 @@ namespace Race { constexpr uint16 Pegasus3 = 732; constexpr uint16 InteractiveObject = 2250; constexpr uint16 Node = 2254; +} - constexpr uint16 ALL_RACES_BITMASK = 65535; +namespace RaceBitmask { + constexpr uint16 Unknown = 0; + constexpr uint16 Human = 1; + constexpr uint16 Barbarian = 2; + constexpr uint16 Erudite = 4; + constexpr uint16 WoodElf = 8; + constexpr uint16 HighElf = 16; + constexpr uint16 DarkElf = 32; + constexpr uint16 HalfElf = 64; + constexpr uint16 Dwarf = 128; + constexpr uint16 Troll = 256; + constexpr uint16 Ogre = 512; + constexpr uint16 Halfling = 1024; + constexpr uint16 Gnome = 2048; + constexpr uint16 Iksar = 4096; + constexpr uint16 VahShir = 8192; + constexpr uint16 Froglok = 16384; + constexpr uint16 Drakkin = 32768; + constexpr uint16 All = 65535; +} + +namespace RaceIndex { + constexpr uint16 Human = 1; + constexpr uint16 Barbarian = 2; + constexpr uint16 Erudite = 3; + constexpr uint16 WoodElf = 4; + constexpr uint16 HighElf = 5; + constexpr uint16 DarkElf = 6; + constexpr uint16 HalfElf = 7; + constexpr uint16 Dwarf = 8; + constexpr uint16 Troll = 9; + constexpr uint16 Ogre = 10; + constexpr uint16 Halfling = 11; + constexpr uint16 Gnome = 12; + constexpr uint16 Iksar = 13; + constexpr uint16 VahShir = 14; + constexpr uint16 Froglok = 15; + constexpr uint16 Drakkin = 16; +} + +namespace RaceAppearance { + bool IsValidBeard(uint16 race_id, uint8 gender_id, uint8 beard_value, bool use_luclin = true); + bool IsValidBeardColor(uint16 race_id, uint8 gender_id, uint8 beard_color_value, bool use_luclin = true); + bool IsValidDetail(uint16 race_id, uint8 gender_id, uint32 detail_value, bool use_luclin = true); + bool IsValidEyeColor(uint16 race_id, uint8 gender_id, uint8 eye_color_value, bool use_luclin = true); + bool IsValidFace(uint16 race_id, uint8 gender_id, uint8 face_value, bool use_luclin = true); + bool IsValidHair(uint16 race_id, uint8 gender_id, uint8 hair_value, bool use_luclin = true); + bool IsValidHairColor(uint16 race_id, uint8 gender_id, uint8 hair_color_value, bool use_luclin = true); + bool IsValidHeritage(uint16 race_id, uint8 gender_id, uint32 heritage_value, bool use_luclin = true); + bool IsValidTattoo(uint16 race_id, uint8 gender_id, uint32 tattoo_value, bool use_luclin = true); + bool IsValidWoad(uint16 race_id, uint8 gender_id, uint8 woad_value, bool use_luclin = true); + + constexpr int HumanMale = (Race::Human << 8) | Gender::Male; + constexpr int HumanFemale = (Race::Human << 8) | Gender::Female; + constexpr int BarbarianMale = (Race::Barbarian << 8) | Gender::Male; + constexpr int BarbarianFemale = (Race::Barbarian << 8) | Gender::Female; + constexpr int EruditeMale = (Race::Erudite << 8) | Gender::Male; + constexpr int EruditeFemale = (Race::Erudite << 8) | Gender::Female; + constexpr int WoodElfMale = (Race::WoodElf << 8) | Gender::Male; + constexpr int WoodElfFemale = (Race::WoodElf << 8) | Gender::Female; + constexpr int HighElfMale = (Race::HighElf << 8) | Gender::Male; + constexpr int HighElfFemale = (Race::HighElf << 8) | Gender::Female; + constexpr int DarkElfMale = (Race::DarkElf << 8) | Gender::Male; + constexpr int DarkElfFemale = (Race::DarkElf << 8) | Gender::Female; + constexpr int HalfElfMale = (Race::HalfElf << 8) | Gender::Male; + constexpr int HalfElfFemale = (Race::HalfElf << 8) | Gender::Female; + constexpr int DwarfMale = (Race::Dwarf << 8) | Gender::Male; + constexpr int DwarfFemale = (Race::Dwarf << 8) | Gender::Female; + constexpr int TrollMale = (Race::Troll << 8) | Gender::Male; + constexpr int TrollFemale = (Race::Troll << 8) | Gender::Female; + constexpr int OgreMale = (Race::Ogre << 8) | Gender::Male; + constexpr int OgreFemale = (Race::Ogre << 8) | Gender::Female; + constexpr int HalflingMale = (Race::Halfling << 8) | Gender::Male; + constexpr int HalflingFemale = (Race::Halfling << 8) | Gender::Female; + constexpr int GnomeMale = (Race::Gnome << 8) | Gender::Male; + constexpr int GnomeFemale = (Race::Gnome << 8) | Gender::Female; + constexpr int IksarMale = (Race::Iksar << 8) | Gender::Male; + constexpr int IksarFemale = (Race::Iksar << 8) | Gender::Female; + constexpr int VahShirMale = (Race::VahShir << 8) | Gender::Male; + constexpr int VahShirFemale = (Race::VahShir << 8) | Gender::Female; + constexpr int FroglokMale = (Race::Froglok2 << 8) | Gender::Male; + constexpr int FroglokFemale = (Race::Froglok2 << 8) | Gender::Female; + constexpr int DrakkinMale = (Race::Drakkin << 8) | Gender::Male; + constexpr int DrakkinFemale = (Race::Drakkin << 8) | Gender::Female; } #endif diff --git a/world/client.cpp b/world/client.cpp index a6ffd7571..52244e531 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -2076,10 +2076,10 @@ bool CheckCharCreateInfoTitanium(CharCreate_Struct *cc) classtemp = cc->class_ - 1; racetemp = cc->race - 1; // these have non sequential race numbers so they need to be mapped - if (cc->race == FROGLOK) racetemp = 14; - if (cc->race == VAHSHIR) racetemp = 13; - if (cc->race == IKSAR) racetemp = 12; - if (cc->race == DRAKKIN) racetemp = 15; + if (cc->race == Race::Froglok2) racetemp = 14; + if (cc->race == Race::VahShir) racetemp = 13; + if (cc->race == Race::Iksar) racetemp = 12; + if (cc->race == Race::Drakkin) racetemp = 15; // if out of range looking it up in the table would crash stuff // so we return from these @@ -2186,43 +2186,43 @@ void Client::SetRaceStartingSkills( PlayerProfile_Struct *pp ) { switch( pp->race ) { - case BARBARIAN: - case DWARF: - case ERUDITE: - case HALF_ELF: - case HIGH_ELF: - case HUMAN: - case OGRE: - case TROLL: - case DRAKKIN: //Drakkin are supposed to get a starting AA Skill + case Race::Barbarian: + case Race::Dwarf: + case Race::Erudite: + case Race::HalfElf: + case Race::HighElf: + case Race::Human: + case Race::Ogre: + case Race::Troll: + case Race::Drakkin: //Drakkin are supposed to get a starting AA Skill { // No Race Specific Skills break; } - case DARK_ELF: + case Race::DarkElf: { pp->skills[EQ::skills::SkillHide] = 50; break; } - case FROGLOK: + case Race::Froglok2: { if (RuleI(Skills, SwimmingStartValue) < 125) { pp->skills[EQ::skills::SkillSwimming] = 125; } break; } - case GNOME: + case Race::Gnome: { pp->skills[EQ::skills::SkillTinkering] = 50; break; } - case HALFLING: + case Race::Halfling: { pp->skills[EQ::skills::SkillHide] = 50; pp->skills[EQ::skills::SkillSneak] = 50; break; } - case IKSAR: + case Race::Iksar: { pp->skills[EQ::skills::SkillForage] = 50; if (RuleI(Skills, SwimmingStartValue) < 100) { @@ -2230,13 +2230,13 @@ void Client::SetRaceStartingSkills( PlayerProfile_Struct *pp ) } break; } - case WOOD_ELF: + case Race::WoodElf: { pp->skills[EQ::skills::SkillForage] = 50; pp->skills[EQ::skills::SkillHide] = 50; break; } - case VAHSHIR: + case Race::VahShir: { pp->skills[EQ::skills::SkillSafeFall] = 50; pp->skills[EQ::skills::SkillSneak] = 50; diff --git a/world/clientlist.cpp b/world/clientlist.cpp index 1671ca2ad..d8f1d9fbc 100644 --- a/world/clientlist.cpp +++ b/world/clientlist.cpp @@ -643,7 +643,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S whomlen = strlen(whom->whom); if (whom->wrace == 0x001A) { // 0x001A is the old Froglok race number and is sent by the client for /who all froglok - whom->wrace = FROGLOK; // This is what EQEmu uses for the Froglok Race number. + whom->wrace = Race::Froglok2; // This is what EQEmu uses for the Froglok Race number. } } diff --git a/zone/aa.cpp b/zone/aa.cpp index 6005f4282..9e25cf860 100644 --- a/zone/aa.cpp +++ b/zone/aa.cpp @@ -1619,7 +1619,7 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) auto race = GetPlayerRaceValue(GetBaseRace()); - race = race > PLAYER_RACE_COUNT ? Race::Human : race; + race = race > RaceIndex::Drakkin ? Race::Human : race; if (!(a->races & (1 << (race - 1)))) { return false; diff --git a/zone/attack.cpp b/zone/attack.cpp index 5a26a9b8f..aee861749 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -896,7 +896,7 @@ int Mob::GetClassRaceACBonus() ac_bonus = 16; } - if (GetRace() == IKSAR) + if (GetRace() == Race::Iksar) ac_bonus += EQ::Clamp(static_cast(level), 10, 35); return ac_bonus; @@ -3545,7 +3545,7 @@ int Mob::GetHandToHandDelay(void) int iksar = 0; if (IsClient() && CastToClient()->GetItemIDAt(12) == 10652 && GetLevel() > 46) epic = 280; - else if (GetRace() == IKSAR) + else if (GetRace() == Race::Iksar) iksar = 1; // the delay bonus from the monk epic scales up to a skill of 280 if (epic >= skill) @@ -3586,8 +3586,8 @@ int Mob::GetHandToHandDelay(void) return 16; int level = GetLevel(); if (level > 62) - return GetRace() == IKSAR ? 21 : 20; - return GetRace() == IKSAR ? mnk_iks_delay[level] : mnk_hum_delay[level]; + return GetRace() == Race::Iksar ? 21 : 20; + return GetRace() == Race::Iksar ? mnk_iks_delay[level] : mnk_hum_delay[level]; } else if (GetClass() == Class::Beastlord) { int level = GetLevel(); diff --git a/zone/bot.cpp b/zone/bot.cpp index 2716c88c6..bd008955d 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -317,7 +317,7 @@ Bot::Bot( ); } else if (spell.base_value[x1] == -2) // WTF IS THIS { - if (GetRace() == IKSAR || GetRace() == VAHSHIR || GetRace() <= GNOME) { + if (GetRace() == Race::Iksar || GetRace() == Race::VahShir || GetRace() <= Race::Gnome) { SendIllusionPacket( AppearanceStruct{ .gender_id = GetGender(), @@ -346,27 +346,27 @@ Bot::Bot( } switch (spell.base_value[x1]) { - case OGRE: + case Race::Ogre: SendAppearancePacket(AppearanceType::Size, 9); break; - case TROLL: + case Race::Troll: SendAppearancePacket(AppearanceType::Size, 8); break; - case VAHSHIR: - case BARBARIAN: + case Race::VahShir: + case Race::Barbarian: SendAppearancePacket(AppearanceType::Size, 7); break; - case HALF_ELF: - case WOOD_ELF: - case DARK_ELF: - case FROGLOK: + case Race::HalfElf: + case Race::WoodElf: + case Race::DarkElf: + case Race::Froglok2: SendAppearancePacket(AppearanceType::Size, 5); break; - case DWARF: + case Race::Dwarf: SendAppearancePacket(AppearanceType::Size, 4); break; - case HALFLING: - case GNOME: + case Race::Halfling: + case Race::Gnome: SendAppearancePacket(AppearanceType::Size, 3); break; default: @@ -457,10 +457,10 @@ Bot::Bot( int resurrection_sickness_spell_id = ( RuleB(Bots, OldRaceRezEffects) && ( - GetRace() == BARBARIAN || - GetRace() == DWARF || - GetRace() == TROLL || - GetRace() == OGRE + GetRace() == Race::Barbarian || + GetRace() == Race::Dwarf || + GetRace() == Race::Troll || + GetRace() == Race::Ogre ) ? RuleI(Bots, OldResurrectionSicknessSpell) : RuleI(Bots, ResurrectionSicknessSpell) @@ -955,9 +955,9 @@ void Bot::GenerateBaseStats() float BotSize = GetSize(); switch(GetRace()) { - case HUMAN: // Humans have no race bonus + case Race::Human: // Humans have no race bonus break; - case BARBARIAN: + case Race::Barbarian: Strength += 28; Stamina += 20; Agility += 7; @@ -968,7 +968,7 @@ void Bot::GenerateBaseStats() BotSize = 7.0; ColdResist += 10; break; - case ERUDITE: + case Race::Erudite: Strength -= 15; Stamina -= 5; Agility -= 5; @@ -979,7 +979,7 @@ void Bot::GenerateBaseStats() MagicResist += 5; DiseaseResist -= 5; break; - case WOOD_ELF: + case Race::WoodElf: Strength -= 10; Stamina -= 10; Agility += 20; @@ -987,7 +987,7 @@ void Bot::GenerateBaseStats() Wisdom += 5; BotSize = 5.0; break; - case HIGH_ELF: + case Race::HighElf: Strength -= 20; Stamina -= 10; Agility += 10; @@ -996,7 +996,7 @@ void Bot::GenerateBaseStats() Intelligence += 12; Charisma += 5; break; - case DARK_ELF: + case Race::DarkElf: Strength -= 15; Stamina -= 10; Agility += 15; @@ -1005,7 +1005,7 @@ void Bot::GenerateBaseStats() Charisma -= 15; BotSize = 5.0; break; - case HALF_ELF: + case Race::HalfElf: Strength -= 5; Stamina -= 5; Agility += 15; @@ -1013,7 +1013,7 @@ void Bot::GenerateBaseStats() Wisdom -= 15; BotSize = 5.5; break; - case DWARF: + case Race::Dwarf: Strength += 15; Stamina += 15; Agility -= 5; @@ -1025,7 +1025,7 @@ void Bot::GenerateBaseStats() MagicResist -= 5; PoisonResist += 5; break; - case TROLL: + case Race::Troll: Strength += 33; Stamina += 34; Agility += 8; @@ -1035,7 +1035,7 @@ void Bot::GenerateBaseStats() BotSize = 8.0; FireResist -= 20; break; - case OGRE: + case Race::Ogre: Strength += 55; Stamina += 77; Agility -= 5; @@ -1045,7 +1045,7 @@ void Bot::GenerateBaseStats() Charisma -= 38; BotSize = 9.0; break; - case HALFLING: + case Race::Halfling: Strength -= 5; Agility += 20; Dexterity += 15; @@ -1056,7 +1056,7 @@ void Bot::GenerateBaseStats() PoisonResist += 5; DiseaseResist += 5; break; - case GNOME: + case Race::Gnome: Strength -= 15; Stamina -= 5; Agility += 10; @@ -1066,7 +1066,7 @@ void Bot::GenerateBaseStats() Charisma -= 15; BotSize = 3.0; break; - case IKSAR: + case Race::Iksar: Strength -= 5; Stamina -= 5; Agility += 15; @@ -1076,7 +1076,7 @@ void Bot::GenerateBaseStats() MagicResist -= 5; FireResist -= 5; break; - case VAHSHIR: + case Race::VahShir: Strength += 15; Agility += 15; Dexterity -= 5; @@ -1087,7 +1087,7 @@ void Bot::GenerateBaseStats() MagicResist -= 5; FireResist -= 5; break; - case FROGLOK: + case Race::Froglok2: Strength -= 5; Stamina += 5; Agility += 25; @@ -1097,7 +1097,7 @@ void Bot::GenerateBaseStats() MagicResist -= 5; FireResist -= 5; break; - case DRAKKIN: + case Race::Drakkin: Strength -= 5; Stamina += 5; Agility += 10; @@ -1140,7 +1140,7 @@ void Bot::GenerateBaseStats() void Bot::GenerateAppearance() { // Randomize facial appearance int iFace = 0; - if (GetRace() == BARBARIAN) // Barbarian w/Tatoo + if (GetRace() == Race::Barbarian) // Barbarian w/Tatoo { iFace = zone->random.Int(0, 79); } @@ -1152,13 +1152,13 @@ void Bot::GenerateAppearance() { int iHair = 0; int iBeard = 0; int iBeardColor = 1; - if (GetRace() == DRAKKIN) { + if (GetRace() == Race::Drakkin) { iHair = zone->random.Int(0, 8); iBeard = zone->random.Int(0, 11); iBeardColor = zone->random.Int(0, 3); } else if (GetGender()) { iHair = zone->random.Int(0, 2); - if (GetRace() == DWARF && zone->random.Int(1, 100) < 50) { + if (GetRace() == Race::Dwarf && zone->random.Int(1, 100) < 50) { iFace += 10; } } else { @@ -1168,7 +1168,7 @@ void Bot::GenerateAppearance() { } int iHairColor = 0; - if (GetRace() == DRAKKIN) { + if (GetRace() == Race::Drakkin) { iHairColor = zone->random.Int(0, 3); } else { iHairColor = zone->random.Int(0, 19); @@ -1176,7 +1176,7 @@ void Bot::GenerateAppearance() { auto iEyeColor1 = (uint8)zone->random.Int(0, 9); uint8 iEyeColor2 = 0; - if (GetRace() == DRAKKIN) { + if (GetRace() == Race::Drakkin) { iEyeColor1 = iEyeColor2 = (uint8)zone->random.Int(0, 11); } else if (zone->random.Int(1, 100) > 96) { iEyeColor2 = zone->random.Int(0, 9); @@ -1187,7 +1187,7 @@ void Bot::GenerateAppearance() { int iHeritage = 0; int iTattoo = 0; int iDetails = 0; - if (GetRace() == DRAKKIN) { + if (GetRace() == Race::Drakkin) { iHeritage = zone->random.Int(0, 6); iTattoo = zone->random.Int(0, 7); iDetails = zone->random.Int(0, 7); @@ -5404,9 +5404,9 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) { case Class::Paladin: { bool is_large_race = ( - GetBaseRace() == OGRE || - GetBaseRace() == TROLL || - GetBaseRace() == BARBARIAN + GetBaseRace() == Race::Ogre || + GetBaseRace() == Race::Troll || + GetBaseRace() == Race::Barbarian ); bool has_bash_skill = GetSkill(EQ::skills::SkillBash) > 0; bool has_shield_in_secondary = diff --git a/zone/bot_commands/appearance.cpp b/zone/bot_commands/appearance.cpp index 5758846c9..6707baea2 100644 --- a/zone/bot_commands/appearance.cpp +++ b/zone/bot_commands/appearance.cpp @@ -46,9 +46,9 @@ void bot_command_beard_color(Client *c, const Seperator *sep) uint8 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (my_bot->GetGender() != Gender::Male && my_bot->GetRace() != DWARF) + if (my_bot->GetGender() != Gender::Male && my_bot->GetRace() != Race::Dwarf) fail_type = AFT_GenderRace; - else if (!PlayerAppearance::IsValidBeardColor(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + else if (!RaceAppearance::IsValidBeardColor(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetBeardColor(uvalue); @@ -83,9 +83,9 @@ void bot_command_beard_style(Client *c, const Seperator *sep) uint8 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (my_bot->GetGender() != Gender::Male && my_bot->GetRace() != DWARF) + if (my_bot->GetGender() != Gender::Male && my_bot->GetRace() != Race::Dwarf) fail_type = AFT_GenderRace; - else if (!PlayerAppearance::IsValidBeard(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + else if (!RaceAppearance::IsValidBeard(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetBeard(uvalue); @@ -122,9 +122,9 @@ void bot_command_details(Client *c, const Seperator *sep) uint32 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (my_bot->GetRace() != DRAKKIN) + if (my_bot->GetRace() != Race::Drakkin) fail_type = AFT_Race; - else if (!PlayerAppearance::IsValidDetail(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + else if (!RaceAppearance::IsValidDetail(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetDrakkinDetails(uvalue); @@ -281,7 +281,7 @@ void bot_command_eyes(Client *c, const Seperator *sep) // eye_bias = 2; auto fail_type = AFT_None; - if (!PlayerAppearance::IsValidEyeColor(my_bot->GetRace(), my_bot->GetGender(), uvalue)) { + if (!RaceAppearance::IsValidEyeColor(my_bot->GetRace(), my_bot->GetGender(), uvalue)) { fail_type = AFT_Value; } else { @@ -328,12 +328,12 @@ void bot_command_face(Client *c, const Seperator *sep) uint8 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (!PlayerAppearance::IsValidFace(my_bot->GetRace(), my_bot->GetGender(), uvalue)) { + if (!RaceAppearance::IsValidFace(my_bot->GetRace(), my_bot->GetGender(), uvalue)) { fail_type = AFT_Value; } else { uint8 old_woad = 0; - if (my_bot->GetRace() == BARBARIAN) + if (my_bot->GetRace() == Race::Barbarian) old_woad = ((my_bot->GetLuclinFace() / 10) * 10); my_bot->SetLuclinFace((old_woad + uvalue)); } @@ -368,7 +368,7 @@ void bot_command_hair_color(Client *c, const Seperator *sep) uint8 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (!PlayerAppearance::IsValidHairColor(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + if (!RaceAppearance::IsValidHairColor(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetHairColor(uvalue); @@ -403,7 +403,7 @@ void bot_command_hairstyle(Client *c, const Seperator *sep) uint8 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (!PlayerAppearance::IsValidHair(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + if (!RaceAppearance::IsValidHair(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetHairStyle(uvalue); @@ -440,9 +440,9 @@ void bot_command_heritage(Client *c, const Seperator *sep) uint32 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (my_bot->GetRace() != DRAKKIN) + if (my_bot->GetRace() != Race::Drakkin) fail_type = AFT_Race; - else if (!PlayerAppearance::IsValidHeritage(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + else if (!RaceAppearance::IsValidHeritage(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetDrakkinHeritage(uvalue); @@ -479,9 +479,9 @@ void bot_command_tattoo(Client *c, const Seperator *sep) uint32 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (my_bot->GetRace() != DRAKKIN) + if (my_bot->GetRace() != Race::Drakkin) fail_type = AFT_Race; - else if (!PlayerAppearance::IsValidTattoo(my_bot->GetRace(), my_bot->GetGender(), uvalue)) + else if (!RaceAppearance::IsValidTattoo(my_bot->GetRace(), my_bot->GetGender(), uvalue)) fail_type = AFT_Value; else my_bot->SetDrakkinTattoo(uvalue); @@ -516,10 +516,10 @@ void bot_command_woad(Client *c, const Seperator *sep) uint8 uvalue = Strings::ToInt(sep->arg[1]); auto fail_type = AFT_None; - if (my_bot->GetRace() != BARBARIAN) { + if (my_bot->GetRace() != Race::Barbarian) { fail_type = AFT_Race; } - else if (!PlayerAppearance::IsValidWoad(my_bot->GetRace(), my_bot->GetGender(), uvalue)) { + else if (!RaceAppearance::IsValidWoad(my_bot->GetRace(), my_bot->GetGender(), uvalue)) { fail_type = AFT_Value; } else { diff --git a/zone/bot_commands/bot.cpp b/zone/bot_commands/bot.cpp index 647e8d75b..2d37c503a 100644 --- a/zone/bot_commands/bot.cpp +++ b/zone/bot_commands/bot.cpp @@ -455,13 +455,13 @@ void bot_command_follow_distance(Client *c, const Seperator *sep) fmt::format("- You must use a value between 1 and {}.", RuleI(Bots, MaxFollowDistance)) }; p.example_format = { fmt::format("{} [reset]/[set [value]] [actionable]", sep->arg[0]) }; - p.examples_one = { - "To set all bots to follow at a distance of 25:", - fmt::format("{} set 25 spawned", sep->arg[0]) + p.examples_one = { + "To set all bots to follow at a distance of 25:", + fmt::format("{} set 25 spawned", sep->arg[0]) }; - p.examples_two = { - "To check the curret following distance of all bots:", - fmt::format("{} current spawned", sep->arg[0]) + p.examples_two = { + "To check the curret following distance of all bots:", + fmt::format("{} current spawned", sep->arg[0]) }; p.examples_three = { @@ -470,10 +470,10 @@ void bot_command_follow_distance(Client *c, const Seperator *sep) "{} reset byclass {}", sep->arg[0], Class::Wizard - ) + ) }; p.actionables = { "target, byname, ownergroup, ownerraid, targetgroup, namesgroup, healrotationtargets, mmr, byclass, byrace, spawned" }; - + std::string popup_text = c->SendBotCommandHelpWindow(p); popup_text = DialogueWindow::Table(popup_text); @@ -483,7 +483,7 @@ void bot_command_follow_distance(Client *c, const Seperator *sep) } const int ab_mask = ActionableBots::ABM_Type2; - + uint32 bfd = RuleI(Bots, DefaultFollowDistance); bool set_flag = false; bool current_check = false; @@ -862,7 +862,7 @@ void bot_command_report(Client *c, const Seperator *sep) c->Message(Chat::White, "usage: %s ([actionable: target | byname | ownergroup | ownerraid | targetgroup | namesgroup | healrotationmembers | healrotationtargets | mmr | byclass | byrace | spawned] ([actionable_name]))", sep->arg[0]); return; } - + const int ab_mask = ActionableBots::ABM_Type1; std::string arg1 = sep->arg[1]; @@ -1057,7 +1057,7 @@ void bot_command_stance(Client *c, const Seperator *sep) BotCommandHelpParams p; p.description = { "Change a bot's stance to control the way it behaves." }; - p.notes = + p.notes = { "- Changing a stance will reset all settings to match that stance type.", "- Any changes made will only save to that stance for future use.", @@ -1122,29 +1122,29 @@ void bot_command_stance(Client *c, const Seperator *sep) Stance::AEBurn ) }; - p.example_format = + p.example_format = { fmt::format( "{} [current | value]", sep->arg[0]) }; - p.examples_one = - { - "To set all bots to BurnAE:", + p.examples_one = + { + "To set all bots to BurnAE:", fmt::format("{} {} spawned {}", sep->arg[0], Stance::Aggressive, Class::ShadowKnight ) }; - p.examples_two = - { - "To set all Shadowknights to Aggressive:", + p.examples_two = + { + "To set all Shadowknights to Aggressive:", fmt::format("{} {} byclass {}", sep->arg[0], Stance::Aggressive, Class::ShadowKnight ) }; - p.examples_three = { - "To check the current stances of all bots:", - fmt::format("{} current spawned", sep->arg[0]) + p.examples_three = { + "To check the current stances of all bots:", + fmt::format("{} current spawned", sep->arg[0]) }; p.actionables = { "target, byname, ownergroup, ownerraid, targetgroup, namesgroup, healrotationtargets, mmr, byclass, byrace, spawned" }; @@ -1239,7 +1239,7 @@ void bot_command_stance(Client *c, const Seperator *sep) database.botdb.LoadBotSettings(bot_iter); if ( - (bot_iter->GetClass() == Class::Warrior || bot_iter->GetClass() == Class::Paladin || bot_iter->GetClass() == Class::ShadowKnight) && + (bot_iter->GetClass() == Class::Warrior || bot_iter->GetClass() == Class::Paladin || bot_iter->GetClass() == Class::ShadowKnight) && (bot_iter->GetBotStance() == Stance::Aggressive) ) { bot_iter->SetTaunting(true); @@ -1255,7 +1255,7 @@ void bot_command_stance(Client *c, const Seperator *sep) bot_iter->GetPet()->CastToNPC()->SetTaunting(false); } } - + bot_iter->Save(); ++success_count; } @@ -1431,7 +1431,7 @@ void bot_command_summon(Client *c, const Seperator *sep) c->Message(Chat::White, "usage: %s ([actionable: target | byname | ownergroup | ownerraid | targetgroup | namesgroup | healrotationtargets | mmr | byclass | byrace | spawned] ([actionable_name]))", sep->arg[0]); return; } - + const int ab_mask = ActionableBots::ABM_Type1; std::string arg1 = sep->arg[1]; @@ -1550,7 +1550,7 @@ void bot_command_toggle_ranged(Client *c, const Seperator *sep) return; } - + std::string arg1 = sep->arg[1]; int ab_arg = 1; @@ -1712,7 +1712,7 @@ void bot_command_toggle_helm(Client *c, const Seperator *sep) return; } - + std::string arg1 = sep->arg[1]; int ab_arg = 1; diff --git a/zone/client.cpp b/zone/client.cpp index 2fa767d09..50c42f69b 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -8445,7 +8445,7 @@ void Client::MerchantRejectMessage(Mob *merchant, int primaryfaction) merchant->SayString(zone->random.Int(WONT_SELL_DEEDS1, WONT_SELL_DEEDS6)); } else if (lowestvalue == fmod.race_mod) { // race biggest // Non-standard race (ex. illusioned to wolf) - if (GetRace() > PLAYER_RACE_COUNT) { + if (!IsPlayerRace(GetRace())) { messageid = zone->random.Int(1, 3); // these aren't sequential StringIDs :( switch (messageid) { case 1: diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 23ef13454..85149ef06 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1011,52 +1011,52 @@ int32 Client::CalcMR() { //racial bases switch (GetBaseRace()) { - case HUMAN: + case Race::Human: MR = 25; break; - case BARBARIAN: + case Race::Barbarian: MR = 25; break; - case ERUDITE: + case Race::Erudite: MR = 30; break; - case WOOD_ELF: + case Race::WoodElf: MR = 25; break; - case HIGH_ELF: + case Race::HighElf: MR = 25; break; - case DARK_ELF: + case Race::DarkElf: MR = 25; break; - case HALF_ELF: + case Race::HalfElf: MR = 25; break; - case DWARF: + case Race::Dwarf: MR = 30; break; - case TROLL: + case Race::Troll: MR = 25; break; - case OGRE: + case Race::Ogre: MR = 25; break; - case HALFLING: + case Race::Halfling: MR = 25; break; - case GNOME: + case Race::Gnome: MR = 25; break; - case IKSAR: + case Race::Iksar: MR = 25; break; - case VAHSHIR: + case Race::VahShir: MR = 25; break; - case FROGLOK: + case Race::Froglok2: MR = 30; break; - case DRAKKIN: + case Race::Drakkin: { MR = 25; if (GetDrakkinHeritage() == 2) @@ -1085,52 +1085,52 @@ int32 Client::CalcFR() { //racial bases switch (GetBaseRace()) { - case HUMAN: + case Race::Human: FR = 25; break; - case BARBARIAN: + case Race::Barbarian: FR = 25; break; - case ERUDITE: + case Race::Erudite: FR = 25; break; - case WOOD_ELF: + case Race::WoodElf: FR = 25; break; - case HIGH_ELF: + case Race::HighElf: FR = 25; break; - case DARK_ELF: + case Race::DarkElf: FR = 25; break; - case HALF_ELF: + case Race::HalfElf: FR = 25; break; - case DWARF: + case Race::Dwarf: FR = 25; break; - case TROLL: + case Race::Troll: FR = 5; break; - case OGRE: + case Race::Ogre: FR = 25; break; - case HALFLING: + case Race::Halfling: FR = 25; break; - case GNOME: + case Race::Gnome: FR = 25; break; - case IKSAR: + case Race::Iksar: FR = 30; break; - case VAHSHIR: + case Race::VahShir: FR = 25; break; - case FROGLOK: + case Race::Froglok2: FR = 25; break; - case DRAKKIN: + case Race::Drakkin: { FR = 25; if (GetDrakkinHeritage() == 0) @@ -1171,52 +1171,52 @@ int32 Client::CalcDR() { //racial bases switch (GetBaseRace()) { - case HUMAN: + case Race::Human: DR = 15; break; - case BARBARIAN: + case Race::Barbarian: DR = 15; break; - case ERUDITE: + case Race::Erudite: DR = 10; break; - case WOOD_ELF: + case Race::WoodElf: DR = 15; break; - case HIGH_ELF: + case Race::HighElf: DR = 15; break; - case DARK_ELF: + case Race::DarkElf: DR = 15; break; - case HALF_ELF: + case Race::HalfElf: DR = 15; break; - case DWARF: + case Race::Dwarf: DR = 15; break; - case TROLL: + case Race::Troll: DR = 15; break; - case OGRE: + case Race::Ogre: DR = 15; break; - case HALFLING: + case Race::Halfling: DR = 20; break; - case GNOME: + case Race::Gnome: DR = 15; break; - case IKSAR: + case Race::Iksar: DR = 15; break; - case VAHSHIR: + case Race::VahShir: DR = 15; break; - case FROGLOK: + case Race::Froglok2: DR = 15; break; - case DRAKKIN: + case Race::Drakkin: { DR = 15; if (GetDrakkinHeritage() == 1) @@ -1263,52 +1263,52 @@ int32 Client::CalcPR() { //racial bases switch (GetBaseRace()) { - case HUMAN: + case Race::Human: PR = 15; break; - case BARBARIAN: + case Race::Barbarian: PR = 15; break; - case ERUDITE: + case Race::Erudite: PR = 15; break; - case WOOD_ELF: + case Race::WoodElf: PR = 15; break; - case HIGH_ELF: + case Race::HighElf: PR = 15; break; - case DARK_ELF: + case Race::DarkElf: PR = 15; break; - case HALF_ELF: + case Race::HalfElf: PR = 15; break; - case DWARF: + case Race::Dwarf: PR = 20; break; - case TROLL: + case Race::Troll: PR = 15; break; - case OGRE: + case Race::Ogre: PR = 15; break; - case HALFLING: + case Race::Halfling: PR = 20; break; - case GNOME: + case Race::Gnome: PR = 15; break; - case IKSAR: + case Race::Iksar: PR = 15; break; - case VAHSHIR: + case Race::VahShir: PR = 15; break; - case FROGLOK: + case Race::Froglok2: PR = 30; break; - case DRAKKIN: + case Race::Drakkin: { PR = 15; if (GetDrakkinHeritage() == 3) @@ -1355,52 +1355,52 @@ int32 Client::CalcCR() { //racial bases switch (GetBaseRace()) { - case HUMAN: + case Race::Human: CR = 25; break; - case BARBARIAN: + case Race::Barbarian: CR = 35; break; - case ERUDITE: + case Race::Erudite: CR = 25; break; - case WOOD_ELF: + case Race::WoodElf: CR = 25; break; - case HIGH_ELF: + case Race::HighElf: CR = 25; break; - case DARK_ELF: + case Race::DarkElf: CR = 25; break; - case HALF_ELF: + case Race::HalfElf: CR = 25; break; - case DWARF: + case Race::Dwarf: CR = 25; break; - case TROLL: + case Race::Troll: CR = 25; break; - case OGRE: + case Race::Ogre: CR = 25; break; - case HALFLING: + case Race::Halfling: CR = 25; break; - case GNOME: + case Race::Gnome: CR = 25; break; - case IKSAR: + case Race::Iksar: CR = 15; break; - case VAHSHIR: + case Race::VahShir: CR = 25; break; - case FROGLOK: + case Race::Froglok2: CR = 25; break; - case DRAKKIN: + case Race::Drakkin: { CR = 25; if (GetDrakkinHeritage() == 4) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 143a44d4e..2100cbb19 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1515,23 +1515,23 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) switch (race) { - case OGRE: + case Race::Ogre: size = 9; break; - case TROLL: + case Race::Troll: size = 8; break; - case VAHSHIR: case BARBARIAN: + case Race::VahShir: case Race::Barbarian: size = 7; break; - case HUMAN: case HIGH_ELF: case ERUDITE: case IKSAR: case DRAKKIN: + case Race::Human: case Race::HighElf: case Race::Erudite: case Race::Iksar: case Race::Drakkin: size = 6; break; - case HALF_ELF: + case Race::HalfElf: size = 5.5; break; - case WOOD_ELF: case DARK_ELF: case FROGLOK: + case Race::WoodElf: case Race::DarkElf: case Race::Froglok2: size = 5; break; - case DWARF: + case Race::Dwarf: size = 4; break; - case HALFLING: + case Race::Halfling: size = 3.5; break; - case GNOME: + case Race::Gnome: size = 3; break; default: size = 0; diff --git a/zone/client_process.cpp b/zone/client_process.cpp index 99f6a48f5..71144db89 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -1648,7 +1648,7 @@ void Client::OPGMTraining(const EQApplicationPacket *app) //#pragma GCC push_options //#pragma GCC optimize ("O0") for (int sk = EQ::skills::Skill1HBlunt; sk <= EQ::skills::HIGHEST_SKILL; ++sk) { - if (sk == EQ::skills::SkillTinkering && GetRace() != GNOME) { + if (sk == EQ::skills::SkillTinkering && GetRace() != Race::Gnome) { gmtrain->skills[sk] = 0; //Non gnomes can't tinker! } else { gmtrain->skills[sk] = GetMaxSkillAfterSpecializationRules((EQ::skills::SkillType)sk, MaxSkill((EQ::skills::SkillType)sk, GetClass(), RuleI(Character, MaxLevel))); diff --git a/zone/entity.cpp b/zone/entity.cpp index 80623674e..37fa9b4ad 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -1389,7 +1389,7 @@ void EntityList::SendZoneSpawnsBulk(Client *client) bool is_delayed_packet = ( DistanceSquared(client_position, spawn_position) > distance_max || - (spawn->IsClient() && (spawn->GetRace() == MINOR_ILL_OBJ || spawn->GetRace() == TREE)) + (spawn->IsClient() && (spawn->GetRace() == Race::MinorIllusion || spawn->GetRace() == Race::Tree)) ); if (is_delayed_packet) { @@ -1413,7 +1413,7 @@ void EntityList::SendZoneSpawnsBulk(Client *client) * * Illusion races on PCs don't work as a mass spawn * But they will work as an add_spawn AFTER CLIENT_CONNECTED. - * if (spawn->IsClient() && (race == MINOR_ILL_OBJ || race == TREE)) { + * if (spawn->IsClient() && (race == Race::MinorIllusion || race == Race::Tree)) { * app = new EQApplicationPacket; * spawn->CreateSpawnPacket(app); * client->QueuePacket(app, true, Client::CLIENT_CONNECTED); diff --git a/zone/exp.cpp b/zone/exp.cpp index a924f24d4..e3016f8b2 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -130,7 +130,7 @@ uint64 Client::CalcEXP(uint8 consider_level, bool ignore_modifiers) { if ( GetClass() == Class::Warrior || GetClass() == Class::Rogue || - GetBaseRace() == HALFLING + GetBaseRace() == Race::Halfling ) { total_modifier *= 1.05; } @@ -291,7 +291,7 @@ void Client::CalculateStandardAAExp(uint64 &add_aaxp, uint8 conlevel, bool resex // Shouldn't race not affect AA XP? if (RuleB(Character, UseRaceClassExpBonuses)) { - if (GetBaseRace() == HALFLING) { + if (GetBaseRace() == Race::Halfling) { aatotalmod *= 1.05; } @@ -439,7 +439,7 @@ void Client::CalculateExp(uint64 in_add_exp, uint64 &add_exp, uint64 &add_aaxp, if (RuleB(Character, UseRaceClassExpBonuses)) { - if (GetBaseRace() == HALFLING) { + if (GetBaseRace() == Race::Halfling) { totalmod *= 1.05; } @@ -1057,13 +1057,13 @@ uint32 Client::GetEXPForLevel(uint16 check_level) if(RuleB(Character,UseOldRaceExpPenalties)) { float racemod = 1.0; - if(GetBaseRace() == TROLL || GetBaseRace() == IKSAR) { + if(GetBaseRace() == Race::Troll || GetBaseRace() == Race::Iksar) { racemod = 1.2; - } else if(GetBaseRace() == OGRE) { + } else if(GetBaseRace() == Race::Ogre) { racemod = 1.15; - } else if(GetBaseRace() == BARBARIAN) { + } else if(GetBaseRace() == Race::Barbarian) { racemod = 1.05; - } else if(GetBaseRace() == HALFLING) { + } else if(GetBaseRace() == Race::Halfling) { racemod = 0.95; } diff --git a/zone/gm_commands/feature.cpp b/zone/gm_commands/feature.cpp index 41999fe2c..f43f279fa 100644 --- a/zone/gm_commands/feature.cpp +++ b/zone/gm_commands/feature.cpp @@ -83,7 +83,7 @@ void command_feature(Client *c, const Seperator *sep) feature_changed = "Beard Color"; value_changed = f.beardcolor; } else if (is_details) { - if (t->GetRace() != DRAKKIN) { + if (t->GetRace() != Race::Drakkin) { c->Message(Chat::White, "You must target a Drakkin to use this command."); return; } @@ -116,7 +116,7 @@ void command_feature(Client *c, const Seperator *sep) feature_changed = "Helmet Texture"; value_changed = helm_texture; } else if (is_heritage) { - if (t->GetRace() != DRAKKIN) { + if (t->GetRace() != Race::Drakkin) { c->Message(Chat::White, "You must target a Drakkin to use this command."); return; } @@ -148,7 +148,7 @@ void command_feature(Client *c, const Seperator *sep) feature_changed = "Size"; value_changed = size; } else if (is_tattoo) { - if (t->GetRace() != DRAKKIN) { + if (t->GetRace() != Race::Drakkin) { c->Message(Chat::White, "You must target a Drakkin to use this command."); return; } diff --git a/zone/gm_commands/randomfeatures.cpp b/zone/gm_commands/randomfeatures.cpp index 64a8bcda3..4a771ba13 100755 --- a/zone/gm_commands/randomfeatures.cpp +++ b/zone/gm_commands/randomfeatures.cpp @@ -8,7 +8,7 @@ void command_randomfeatures(Client *c, const Seperator *sep) } auto target = c->GetTarget(); - + if (target->RandomizeFeatures()) { c->Message( Chat::White, diff --git a/zone/mob.cpp b/zone/mob.cpp index 0a167201d..7968cdaca 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -3819,7 +3819,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) // Adjust all settings based on the min and max for each feature of each race and gender switch (GetRace()) { - case HUMAN: + case Race::Human: new_hair_color = zone->random.Int(0, 19); if (current_gender == Gender::Male) { @@ -3831,7 +3831,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case BARBARIAN: + case Race::Barbarian: new_hair_color = zone->random.Int(0, 19); new_luclin_face = zone->random.Int(0, 87); @@ -3844,7 +3844,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case ERUDITE: + case Race::Erudite: if (current_gender == Gender::Male) { new_beard_color = zone->random.Int(0, 19); new_beard = zone->random.Int(0, 5); @@ -3854,7 +3854,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case WOOD_ELF: + case Race::WoodElf: new_hair_color = zone->random.Int(0, 19); if (current_gender == Gender::Male) { @@ -3864,7 +3864,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case HIGH_ELF: + case Race::HighElf: new_hair_color = zone->random.Int(0, 14); if (current_gender == Gender::Male) { @@ -3876,7 +3876,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case DARK_ELF: + case Race::DarkElf: new_hair_color = zone->random.Int(13, 18); if (current_gender == Gender::Male) { @@ -3888,7 +3888,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case HALF_ELF: + case Race::HalfElf: new_hair_color = zone->random.Int(0, 19); if (current_gender == Gender::Male) { @@ -3900,7 +3900,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case DWARF: + case Race::Dwarf: new_hair_color = zone->random.Int(0, 19); new_beard_color = new_hair_color; @@ -3913,7 +3913,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case TROLL: + case Race::Troll: new_eye_color_one = zone->random.Int(0, 10); new_eye_color_two = zone->random.Int(0, 10); @@ -3923,14 +3923,14 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case OGRE: + case Race::Ogre: if (current_gender == Gender::Female) { new_hair_style = zone->random.Int(0, 3); new_hair_color = zone->random.Int(0, 23); } break; - case HALFLING: + case Race::Halfling: new_hair_color = zone->random.Int(0, 19); if (current_gender == Gender::Male) { @@ -3942,7 +3942,7 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case GNOME: + case Race::Gnome: new_hair_color = zone->random.Int(0, 24); if (current_gender == Gender::Male) { @@ -3954,14 +3954,14 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) } break; - case IKSAR: - case VAHSHIR: + case Race::Iksar: + case Race::VahShir: new_luclin_face = zone->random.Int(0, 7); break; - case FROGLOK: + case Race::Froglok2: new_luclin_face = zone->random.Int(0, 9); break; - case DRAKKIN: + case Race::Drakkin: new_hair_color = zone->random.Int(0, 3); new_beard_color = new_hair_color; new_eye_color_one = zone->random.Int(0, 11); @@ -4023,8 +4023,8 @@ bool Mob::RandomizeFeatures(bool send_illusion, bool set_variables) uint16 Mob::GetFactionRace() { uint16 current_race = GetRace(); - if (IsPlayerRace(current_race) || current_race == TREE || - current_race == MINOR_ILL_OBJ) { + if (IsPlayerRace(current_race) || current_race == Race::Tree || + current_race == Race::MinorIllusion) { return current_race; } else { @@ -7704,7 +7704,7 @@ bool Mob::CanRaceEquipItem(uint32 item_id) } auto item_races = itm->Races; - if(item_races == PLAYER_RACE_ALL_MASK) { + if(item_races == RaceBitmask::All) { return true; } diff --git a/zone/npc.cpp b/zone/npc.cpp index de97d0fb5..8f12645b7 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -2901,7 +2901,7 @@ void NPC::DoNPCEmote(uint8 event_, uint32 emote_id, Mob* t) // Mob Variables Strings::FindReplace(processed, "$mname", GetCleanName()); Strings::FindReplace(processed, "$mracep", GetRacePlural()); - Strings::FindReplace(processed, "$mrace", GetPlayerRaceName(GetRace())); + Strings::FindReplace(processed, "$mrace", GetRaceIDName(GetRace())); Strings::FindReplace(processed, "$mclass", GetClassIDName(GetClass())); Strings::FindReplace(processed, "$mclassp", GetClassPlural()); @@ -2909,7 +2909,7 @@ void NPC::DoNPCEmote(uint8 event_, uint32 emote_id, Mob* t) Strings::FindReplace(processed, "$name", t ? t->GetCleanName() : "foe"); Strings::FindReplace(processed, "$class", t ? GetClassIDName(t->GetClass()) : "class"); Strings::FindReplace(processed, "$classp", t ? t->GetClassPlural() : "classes"); - Strings::FindReplace(processed, "$race", t ? GetPlayerRaceName(t->GetRace()) : "race"); + Strings::FindReplace(processed, "$race", t ? GetRaceIDName(t->GetRace()) : "race"); Strings::FindReplace(processed, "$racep", t ? t->GetRacePlural() : "races"); if (emoteid == e->emoteid) { @@ -3792,7 +3792,7 @@ bool NPC::IsGuard() case Race::HalasCitizen: case Race::NeriakCitizen: case Race::GrobbCitizen: - case OGGOK_CITIZEN: + case Race::OggokCitizen: case Race::KaladimCitizen: return true; default: diff --git a/zone/special_attacks.cpp b/zone/special_attacks.cpp index b1101e9c6..57feb3f2e 100644 --- a/zone/special_attacks.cpp +++ b/zone/special_attacks.cpp @@ -352,9 +352,9 @@ void Client::OPCombatAbility(const CombatAbility_Struct *ca_atk) if (ca_atk->m_skill == EQ::skills::SkillBash) { // SLAM - Bash without a shield equipped switch (GetRace()) { - case OGRE: - case TROLL: - case BARBARIAN: + case Race::Ogre: + case Race::Troll: + case Race::Barbarian: bypass_skill_check = true; default: break; diff --git a/zone/tradeskills.cpp b/zone/tradeskills.cpp index 6e1678394..d307ca418 100644 --- a/zone/tradeskills.cpp +++ b/zone/tradeskills.cpp @@ -466,7 +466,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob } } else if (spec.tradeskill == EQ::skills::SkillTinkering) { - if (user_pp.race != GNOME) { + if (user_pp.race != Race::Gnome) { user->Message(Chat::Red, "Only gnomes can tinker."); auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); user->QueuePacket(outapp); @@ -643,7 +643,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac } } else if (spec.tradeskill == EQ::skills::SkillTinkering) { - if (user->GetRace() != GNOME) { + if (user->GetRace() != Race::Gnome) { user->Message(Chat::Red, "Only gnomes can tinker."); auto outapp = new EQApplicationPacket(OP_TradeSkillCombine, 0); user->QueuePacket(outapp); diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index f0fe6a870..7643e0e27 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -4276,7 +4276,7 @@ bool WorldServer::SendVoiceMacro(Client* From, uint32 Type, char* Target, uint32 uint16 player_race = GetPlayerRaceValue(From->GetRace()); - if (player_race == PLAYER_RACE_UNKNOWN) { + if (player_race == Race::Doug) { player_race = From->GetBaseRace(); }