/* EQEmu: EQEmulator
Copyright (C) 2001-2026 EQEmu Development Team
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "races.h"
#include "common/data_verification.h"
const char* GetRaceIDName(uint16 race_id)
{
switch (race_id) {
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";
}
}
uint32 GetPlayerRaceValue(uint16 race_id)
{
switch (race_id) {
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 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 Race::Doug;
}
}
uint16 GetPlayerRaceBit(uint16 race_id)
{
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;
}
}
float GetRaceGenderDefaultHeight(int race, int gender)
{
static float male_height[] = {
6.0f, 6.0f, 7.0f, 6.0f, 5.0f, 6.0f, 5.0f, 5.5f, 4.0f, 8.0f, 9.0f, 3.5f, 3.0f, 6.0f, 6.0f,
2.0f, 8.5f, 8.0f, 21.0f, 20.0f, 6.0f, 6.0f, 3.5f, 3.0f, 6.0f, 2.0f, 5.0f, 5.0f, 6.0f, 6.0f,
6.0f, 7.5f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 5.0f, 6.0f, 6.0f, 7.0f, 4.0f, 4.7f, 6.0f,
8.0f, 3.0f, 12.0f, 5.0f, 21.0f, 6.0f, 6.0f, 3.0f, 9.0f, 6.0f, 6.0f, 2.0f, 6.0f, 3.0f, 6.0f,
4.0f, 20.0f, 5.0f, 5.0f, 6.0f, 9.0f, 25.0f, 6.0f, 6.0f, 10.0f, 6.0f, 6.0f, 6.0f, 6.0f, 2.5f,
7.0f, 6.0f, 5.0f, 6.0f, 1.5f, 1.0f, 3.5f, 7.0f, 6.0f, 6.0f, 6.0f, 6.0f, 7.0f, 3.0f, 3.0f,
7.0f, 12.0f, 8.0f, 9.0f, 4.0f, 11.5f, 8.0f, 6.0f, 6.0f, 12.0f, 6.0f, 6.0f, 6.0f, 20.0f, 10.0f,
6.5f, 6.0f, 17.0f, 1.0f, 4.0f, 6.0f, 8.0f, 5.0f, 1.0f, 6.0f, 6.0f, 5.0f, 5.0f, 5.0f, 9.0f,
3.0f, 8.0f, 2.0f, 24.0f, 6.0f, 10.0f, 6.0f, 6.0f, 6.0f, 3.0f, 7.0f, 9.0f, 6.0f, 11.0f, 2.5f,
14.0f, 8.0f, 7.0f, 12.0f, 6.0f, 27.0f, 6.0f, 6.0f, 6.0f, 6.0f, 2.0f, 9.0f, 9.0f, 6.0f, 9.0f,
3.0f, 3.0f, 6.0f, 6.0f, 10.0f, 6.0f, 6.0f, 15.0f, 15.0f, 9.0f, 7.0f, 6.0f, 6.0f, 7.0f, 8.0f,
3.0f, 3.0f, 6.0f, 7.0f, 13.0f, 6.0f, 6.0f, 9.0f, 5.0f, 7.0f, 9.0f, 6.0f, 6.0f, 8.0f, 6.0f,
6.0f, 5.5f, 6.0f, 4.0f, 25.0f, 6.0f, 6.0f, 6.0f, 22.0f, 20.0f, 6.0f, 10.0f, 13.5f, 12.0f, 3.0f,
30.0f, 6.0f, 6.0f, 35.0f, 1.5f, 8.0f, 3.0f, 6.0f, 2.0f, 6.0f, 6.0f, 5.0f, 2.0f, 7.0f, 6.0f,
6.0f, 6.0f, 6.0f, 4.0f, 6.0f, 6.0f, 6.0f, 8.0f, 8.0f, 7.0f, 8.0f, 6.0f, 7.0f, 6.0f, 7.0f,
6.0f, 10.0f, 3.0f, 6.0f, 8.0f, 9.0f, 15.0f, 5.0f, 10.0f, 7.0f, 6.0f, 7.0f, 6.0f, 7.0f, 7.0f,
12.0f, 6.0f, 4.0f, 6.0f, 5.0f, 3.0f, 30.0f, 30.0f, 15.0f, 20.0f, 6.0f, 10.0f, 6.0f, 14.0f, 14.0f,
16.0f, 15.0f, 30.0f, 15.0f, 7.5f, 5.0f, 4.0f, 6.0f, 15.0f, 6.5f, 3.0f, 12.0f, 10.0f, 10.5f, 10.0f,
7.5f, 6.0f, 6.0f, 12.5f, 9.0f, 20.0f, 2.0f, 10.0f, 25.0f, 8.0f, 6.0f, 6.0f, 10.0f, 18.0f, 45.0f,
13.0f, 15.0f, 8.0f, 30.0f, 25.0f, 25.0f, 10.0f, 13.0f, 5.0f, 3.5f, 15.0f, 35.0f, 11.0f, 15.0f, 50.0f,
13.0f, 6.0f, 7.0f, 6.0f, 60.0f, 6.0f, 22.0f, 22.0f, 21.0f, 22.0f, 15.0f, 25.0f, 23.0f, 8.0f, 15.0f,
10.0f, 6.0f, 7.0f, 6.0f, 12.0f, 9.5f, 6.0f, 12.0f, 12.0f, 12.0f, 15.0f, 4.0f, 5.0f, 105.0f, 20.0f,
5.0f, 10.0f, 10.0f, 10.0f, 20.0f, 13.5f, 8.0f, 10.0f, 3.0f, 5.0f, 9.0f, 6.0f, 6.0f, 6.0f, 10.0f,
8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 5.0f, 5.0f, 5.0f, 9.0f, 9.0f, 9.0f, 6.0f, 8.5f, 6.0f, 7.0f,
8.0f, 7.0f, 11.0f, 6.0f, 7.0f, 9.0f, 8.0f, 6.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 9.0f, 10.0f,
6.0f, 3.0f, 4.0f, 3.0f, 3.0f, 4.0f, 10.0f, 10.0f, 2.0f, 8.0f, 6.0f, 6.0f, 14.0f, 7.0f, 5.0f,
9.0f, 7.0f, 7.0f, 10.0f, 10.0f, 12.0f, 9.0f, 7.0f, 12.0f, 13.0f, 16.0f, 6.0f, 9.0f, 6.0f, 6.0f,
10.0f, 25.0f, 15.0f, 6.0f, 25.0f, 6.0f, 6.0f, 8.0f, 11.0f, 6.0f, 9.0f, 2.0f, 6.0f, 5.0f, 4.0f,
8.5f, 6.0f, 6.0f, 6.0f, 4.0f, 6.0f, 15.0f, 1.0f, 2.0f, 6.0f, 40.0f, 8.0f, 12.0f, 3.0f, 8.0f,
99.0f, 9.0f, 100.0f, 100.0f, 10.0f, 6.0f, 27.5f, 20.0f, 6.0f, 6.0f, 5.0f, 6.0f, 8.0f, 5.0f, 3.0f,
11.5f, 25.0f, 80.0f, 20.0f, 9.0f, 8.0f, 5.0f, 4.0f, 7.0f, 10.0f, 6.0f, 11.0f, 8.0f, 5.0f, 6.0f,
6.0f, 30.0f, 7.0f, 15.0f, 9.0f, 6.0f, 9.0f, 6.0f, 3.0f, 32.5f, 15.0f, 7.5f, 10.0f, 10.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 9.0f, 20.0f, 6.0f, 6.0f, 6.0f, 25.0f, 12.0f, 6.0f, 8.0f, 6.0f,
6.0f, 20.0f, 10.0f, 8.0f, 12.0f, 8.0f, 2.0f, 6.0f, 3.0f, 6.0f, 7.0f, 1.5f, 6.0f, 3.0f, 3.0f,
3.0f, 3.0f, 2.0f, 3.0f, 3.0f, 6.0f, 6.0f, 6.0f, 4.5f, 7.0f, 6.0f, 7.0f, 6.0f, 22.0f, 8.0f,
15.0f, 22.0f, 8.0f, 15.0f, 6.0f, 80.0f, 150.0f, 7.0f, 6.0f, 6.0f, 6.0f, 12.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 35.0f, 20.0f, 9.0f, 6.0f, 6.0f, 6.0f, 20.0f, 20.0f,
20.0f, 20.0f, 20.0f, 9.0f, 4.0f, 4.0f, 10.0f, 5.0f, 8.0f, 6.0f, 10.0f, 6.0f, 6.0f, 2.0f, 36.0f,
14.0f, 7.0f, 250.0f, 6.0f, 9.0f, 6.0f, 7.0f, 4.0f, 6.0f, 8.0f, 6.0f, 23.0f, 6.0f, 6.0f, 6.0f,
70.0f, 6.0f, 7.0f, 6.0f, 6.0f, 6.0f, 20.0f, 6.0f, 6.0f, 6.0f, 5.0f, 1.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
4.0f, 4.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 10.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 7.0f, 7.0f, 7.0f, 7.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 8.0f,
6.0f, 6.0f, 6.0f, 7.0f, 6.0f, 6.0f, 6.0f, 7.5f, 6.0f, 6.0f, 4.0f, 6.0f, 3.0f, 6.0f, 6.0f,
1.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 8.0f,
};
static float female_height[] = {
6.0f, 6.0f, 7.0f, 6.0f, 5.0f, 6.0f, 5.0f, 5.5f, 4.0f, 8.0f, 9.0f, 3.5f, 3.0f, 6.0f, 6.0f,
2.0f, 8.5f, 8.0f, 21.0f, 20.0f, 6.0f, 6.0f, 3.5f, 3.0f, 6.0f, 2.0f, 5.0f, 5.0f, 6.0f, 6.0f,
6.0f, 7.5f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 5.0f, 6.0f, 6.0f, 7.0f, 4.0f, 4.7f, 6.0f,
8.0f, 3.0f, 12.0f, 5.0f, 21.0f, 6.0f, 6.0f, 3.0f, 9.0f, 6.0f, 6.0f, 2.0f, 6.0f, 3.0f, 6.0f,
4.0f, 20.0f, 5.0f, 5.0f, 6.0f, 9.0f, 25.0f, 6.0f, 6.0f, 10.0f, 6.0f, 6.0f, 6.0f, 6.0f, 2.5f,
7.0f, 6.0f, 5.0f, 6.0f, 1.5f, 1.0f, 3.5f, 7.0f, 6.0f, 6.0f, 6.0f, 6.0f, 7.0f, 3.0f, 3.0f,
7.0f, 12.0f, 8.0f, 9.0f, 4.0f, 11.5f, 8.0f, 6.0f, 6.0f, 12.0f, 6.0f, 6.0f, 6.0f, 20.0f, 10.0f,
6.5f, 6.0f, 17.0f, 1.0f, 4.0f, 6.0f, 8.0f, 5.0f, 1.0f, 6.0f, 6.0f, 5.0f, 5.0f, 5.0f, 9.0f,
3.0f, 8.0f, 2.0f, 24.0f, 6.0f, 10.0f, 6.0f, 6.0f, 6.0f, 3.0f, 7.0f, 9.0f, 6.0f, 11.0f, 2.5f,
14.0f, 8.0f, 7.0f, 12.0f, 6.0f, 27.0f, 6.0f, 6.0f, 6.0f, 6.0f, 2.0f, 9.0f, 9.0f, 6.0f, 9.0f,
3.0f, 3.0f, 6.0f, 6.0f, 10.0f, 6.0f, 6.0f, 15.0f, 15.0f, 9.0f, 7.0f, 6.0f, 6.0f, 7.0f, 8.0f,
3.0f, 3.0f, 6.0f, 7.0f, 13.0f, 6.0f, 6.0f, 9.0f, 5.0f, 7.0f, 9.0f, 6.0f, 6.0f, 8.0f, 6.0f,
6.0f, 5.5f, 6.0f, 4.0f, 25.0f, 6.0f, 6.0f, 6.0f, 22.0f, 20.0f, 6.0f, 10.0f, 13.5f, 12.0f, 3.0f,
30.0f, 6.0f, 6.0f, 35.0f, 1.5f, 8.0f, 3.0f, 6.0f, 2.0f, 6.0f, 6.0f, 5.0f, 2.0f, 7.0f, 6.0f,
6.0f, 6.0f, 6.0f, 4.0f, 6.0f, 6.0f, 6.0f, 8.0f, 8.0f, 7.0f, 8.0f, 6.0f, 7.0f, 6.0f, 7.0f,
6.0f, 10.0f, 3.0f, 6.0f, 8.0f, 9.0f, 15.0f, 5.0f, 10.0f, 7.0f, 6.0f, 7.0f, 6.0f, 7.0f, 7.0f,
12.0f, 6.0f, 4.0f, 6.0f, 5.0f, 3.0f, 30.0f, 30.0f, 15.0f, 20.0f, 6.0f, 10.0f, 6.0f, 14.0f, 14.0f,
16.0f, 15.0f, 30.0f, 15.0f, 7.5f, 5.0f, 4.0f, 6.0f, 15.0f, 6.5f, 3.0f, 12.0f, 10.0f, 10.5f, 10.0f,
7.5f, 6.0f, 6.0f, 12.5f, 9.0f, 20.0f, 2.0f, 10.0f, 25.0f, 8.0f, 6.0f, 6.0f, 10.0f, 18.0f, 45.0f,
13.0f, 15.0f, 8.0f, 30.0f, 25.0f, 25.0f, 10.0f, 13.0f, 5.0f, 3.5f, 15.0f, 35.0f, 11.0f, 15.0f, 50.0f,
13.0f, 6.0f, 7.0f, 6.0f, 60.0f, 6.0f, 22.0f, 22.0f, 21.0f, 22.0f, 15.0f, 25.0f, 23.0f, 8.0f, 15.0f,
10.0f, 6.0f, 7.0f, 6.0f, 12.0f, 9.5f, 6.0f, 12.0f, 12.0f, 12.0f, 15.0f, 4.0f, 5.0f, 105.0f, 20.0f,
5.0f, 10.0f, 10.0f, 10.0f, 20.0f, 13.5f, 8.0f, 10.0f, 3.0f, 5.0f, 9.0f, 6.0f, 6.0f, 6.0f, 10.0f,
8.0f, 8.0f, 8.0f, 6.0f, 6.0f, 5.0f, 5.0f, 5.0f, 9.0f, 9.0f, 9.0f, 6.0f, 8.5f, 6.0f, 7.0f,
8.0f, 7.0f, 11.0f, 6.0f, 7.0f, 9.0f, 8.0f, 6.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 9.0f, 10.0f,
6.0f, 3.0f, 4.0f, 3.0f, 3.0f, 4.0f, 10.0f, 10.0f, 2.0f, 8.0f, 6.0f, 6.0f, 14.0f, 7.0f, 5.0f,
9.0f, 7.0f, 7.0f, 10.0f, 10.0f, 12.0f, 9.0f, 7.0f, 12.0f, 13.0f, 16.0f, 6.0f, 9.0f, 6.0f, 6.0f,
10.0f, 25.0f, 15.0f, 6.0f, 25.0f, 6.0f, 6.0f, 8.0f, 11.0f, 6.0f, 9.0f, 2.0f, 6.0f, 5.0f, 4.0f,
8.5f, 6.0f, 6.0f, 6.0f, 4.0f, 6.0f, 15.0f, 1.0f, 2.0f, 6.0f, 40.0f, 8.0f, 12.0f, 3.0f, 8.0f,
99.0f, 9.0f, 100.0f, 100.0f, 10.0f, 6.0f, 27.5f, 20.0f, 6.0f, 6.0f, 5.0f, 6.0f, 8.0f, 5.0f, 3.0f,
11.5f, 25.0f, 80.0f, 20.0f, 9.0f, 8.0f, 5.0f, 4.0f, 7.0f, 10.0f, 6.0f, 11.0f, 8.0f, 5.0f, 6.0f,
6.0f, 30.0f, 7.0f, 15.0f, 9.0f, 6.0f, 9.0f, 6.0f, 3.0f, 32.5f, 15.0f, 7.5f, 10.0f, 10.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 9.0f, 20.0f, 6.0f, 6.0f, 6.0f, 25.0f, 12.0f, 6.0f, 8.0f, 6.0f,
6.0f, 20.0f, 9.0f, 8.0f, 12.0f, 8.0f, 2.0f, 6.0f, 3.0f, 6.0f, 7.0f, 1.5f, 6.0f, 3.0f, 3.0f,
3.0f, 3.0f, 2.0f, 3.0f, 3.0f, 6.0f, 6.0f, 6.0f, 4.5f, 7.0f, 6.0f, 7.0f, 5.7f, 22.0f, 8.0f,
15.0f, 22.0f, 8.0f, 15.0f, 6.0f, 80.0f, 150.0f, 7.0f, 6.0f, 6.0f, 6.0f, 12.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 35.0f, 20.0f, 9.0f, 6.0f, 6.0f, 6.0f, 20.0f, 20.0f,
20.0f, 20.0f, 20.0f, 9.0f, 4.0f, 4.0f, 10.0f, 5.0f, 8.0f, 6.0f, 10.0f, 5.7f, 6.0f, 2.0f, 36.0f,
14.0f, 7.0f, 250.0f, 6.0f, 9.0f, 6.0f, 7.0f, 4.0f, 6.0f, 8.0f, 6.0f, 23.0f, 6.0f, 6.0f, 6.0f,
70.0f, 6.0f, 7.0f, 6.0f, 6.0f, 6.0f, 20.0f, 6.0f, 6.0f, 6.0f, 5.0f, 1.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
4.0f, 4.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 10.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f,
6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 7.0f, 7.0f, 7.0f, 7.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 8.0f,
6.0f, 6.0f, 6.0f, 7.0f, 6.0f, 6.0f, 6.0f, 7.5f, 6.0f, 6.0f, 4.0f, 6.0f, 3.0f, 6.0f, 6.0f,
1.0f, 9.0f, 7.0f, 8.0f, 7.0f, 8.0f, 6.0f, 6.0f, 6.0f, 6.0f, 6.0f, 8.0f,
};
const auto size = sizeof(male_height) / sizeof(male_height[0]);
if (race >= size) {
return 6.0f;
}
if (gender == Gender::Female) {
return female_height[race];
}
return male_height[race];
}
#define GetRaceGenderMask(race_id, gender_id) (((int)race_id << 8) | gender_id)
bool RaceAppearance::IsValidBeard(uint16 race_id, uint8 gender_id, uint8 beard_value, bool use_luclin)
{
if (beard_value == std::numeric_limits::max()) {
return true;
}
if (use_luclin) {
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 (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 RaceAppearance::IsValidBeardColor(uint16 race_id, uint8 gender_id, uint8 beard_color_value, bool use_luclin)
{
if (beard_color_value == std::numeric_limits::max()) {
return true;
}
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 RaceAppearance::IsValidDetail(uint16 race_id, uint8 gender_id, uint32 detail_value, bool use_luclin)
{
if (detail_value == std::numeric_limits::max()) {
return true;
}
switch (GetRaceGenderMask(race_id, gender_id)) {
case RaceAppearance::DrakkinMale:
case RaceAppearance::DrakkinFemale:
if (detail_value <= 7) {
return true;
}
break;
default:
break;
}
return false;
}
bool RaceAppearance::IsValidEyeColor(uint16 race_id, uint8 gender_id, uint8 eye_color_value, bool use_luclin)
{
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 (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 (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 RaceAppearance::IsValidHairColor(uint16 race_id, uint8 gender_id, uint8 hair_color_value, bool use_luclin)
{
if (hair_color_value == std::numeric_limits::max()) {
return true;
}
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 RaceAppearance::IsValidHeritage(uint16 race_id, uint8 gender_id, uint32 heritage_value, bool use_luclin)
{
if (heritage_value == std::numeric_limits::max()) {
return true;
}
switch (GetRaceGenderMask(race_id, gender_id)) {
case RaceAppearance::DrakkinMale:
case RaceAppearance::DrakkinFemale:
if (heritage_value <= 7) {
return true;
}
break;
default:
break;
}
return false;
}
bool RaceAppearance::IsValidTattoo(uint16 race_id, uint8 gender_id, uint32 tattoo_value, bool use_luclin)
{
if (tattoo_value == std::numeric_limits::max()) {
return true;
}
switch (GetRaceGenderMask(race_id, gender_id)) {
case RaceAppearance::DrakkinMale:
case RaceAppearance::DrakkinFemale:
if (tattoo_value <= 7) {
return true;
}
break;
default:
break;
}
return false;
}
bool RaceAppearance::IsValidWoad(uint16 race_id, uint8 gender_id, uint8 woad_value, bool use_luclin)
{
if (woad_value == std::numeric_limits::max()) {
return true;
}
if (use_luclin) {
switch (GetRaceGenderMask(race_id, gender_id)) {
case RaceAppearance::BarbarianMale:
case RaceAppearance::BarbarianFemale:
if (woad_value <= 8) {
return true;
}
break;
default:
break;
}
}
return false;
}
const char* GetGenderName(uint32 gender_id) {
const char* gender_name = "Unknown";
if (gender_id == Gender::Male) {
gender_name = "Male";
} else if (gender_id == Gender::Female) {
gender_name = "Female";
} else if (gender_id == Gender::Neuter) {
gender_name = "Neuter";
}
return gender_name;
}
const std::string GetPlayerRaceAbbreviation(uint16 race_id)
{
if (!IsPlayerRace(race_id)) {
return std::string("UNK");
}
switch (race_id) {
case Race::Human:
return "HUM";
case Race::Barbarian:
return "BAR";
case Race::Erudite:
return "ERU";
case Race::WoodElf:
return "ELF";
case Race::HighElf:
return "HIE";
case Race::DarkElf:
return "DEF";
case Race::HalfElf:
return "HEF";
case Race::Dwarf:
return "DWF";
case Race::Troll:
return "TRL";
case Race::Ogre:
return "OGR";
case Race::Halfling:
return "HFL";
case Race::Gnome:
return "GNM";
case Race::Iksar:
return "IKS";
case Race::VahShir:
return "VAH";
case Race::Froglok2:
return "FRG";
case Race::Drakkin:
return "DRK";
}
return std::string("UNK");
}
bool IsPlayerRace(uint16 race_id) {
return (
EQ::ValueWithin(race_id, Race::Human, Race::Gnome) ||
race_id == Race::Iksar ||
race_id == Race::VahShir ||
race_id == Race::Froglok2 ||
race_id == Race::Drakkin
);
}