diff --git a/common/faction.cpp b/common/faction.cpp index 2b82f2bf6..29cf45e58 100644 --- a/common/faction.cpp +++ b/common/faction.cpp @@ -96,12 +96,12 @@ bool IsOfEqualRace(int r1, int r2) // TODO: add more values switch (r1) { case DARK_ELF: - if (r2 == RACE_NERIAK_CITIZEN_77) { + if (r2 == Race::NeriakCitizen) { return true; } break; case BARBARIAN: - if (r2 == RACE_HALAS_CITIZEN_90) { + if (r2 == Race::HalasCitizen) { return true; } } diff --git a/common/inventory_profile.h b/common/inventory_profile.h index 4c0b29665..657668a3e 100644 --- a/common/inventory_profile.h +++ b/common/inventory_profile.h @@ -132,7 +132,7 @@ namespace EQ // Swap items in inventory enum SwapItemFailState : int8 { swapInvalid = -1, swapPass = 0, swapNotAllowed, swapNullData, swapRaceClass, swapDeity, swapLevel }; - bool SwapItem(int16 source_slot, int16 destination_slot, SwapItemFailState& fail_state, uint16 race_id = RACE_DOUG_0, uint8 class_id = Class::None, uint16 deity_id = deity::DeityType::DeityUnknown, uint8 level = 0); + bool SwapItem(int16 source_slot, int16 destination_slot, SwapItemFailState& fail_state, uint16 race_id = Race::Doug, uint8 class_id = Class::None, uint16 deity_id = deity::DeityType::DeityUnknown, uint8 level = 0); // Remove item from inventory bool DeleteItem(int16 slot_id, int16 quantity = 0); diff --git a/common/item_instance.cpp b/common/item_instance.cpp index 2b3c75428..a0cfd1f9e 100644 --- a/common/item_instance.cpp +++ b/common/item_instance.cpp @@ -1273,7 +1273,7 @@ int EQ::ItemInstance::GetItemBaneDamageBody(bool augments) const int EQ::ItemInstance::GetItemBaneDamageRace(bool augments) const { - int race = RACE_DOUG_0; + int race = Race::Doug; const auto item = GetItem(); if (item) { race = item->BaneDmgRace; diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 9665f11a7..04366233f 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -3868,8 +3868,8 @@ namespace RoF } float SpawnSize = emu->size; - if (!((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522)) + if (!((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin)) ) { PacketSize += 60; @@ -4002,8 +4002,8 @@ namespace RoF VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0xffffffff); // unknown18 VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0xffffffff); // unknown19 - if ((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522) + if ((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin) ) { for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index f62209361..944cfbf7e 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -4007,8 +4007,8 @@ namespace RoF2 } float SpawnSize = emu->size; - if (!((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522)) + if (!((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin)) ) { PacketSize += 60; @@ -4212,8 +4212,8 @@ namespace RoF2 VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0xffffffff); // These do something with OP_WeaponEquip1 VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0xffffffff); // ^ - if ((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522) + if ((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin) ) { for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 43a07a9dc..fd25d6f7e 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -2507,8 +2507,8 @@ namespace SoD } float SpawnSize = emu->size; - if (!((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522)) + if (!((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin)) ) { PacketSize -= (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); @@ -2706,8 +2706,8 @@ namespace SoD Buffer += sizeof(structs::Spawn_Struct_Position); - if ((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522) + if ((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin) ) { for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) @@ -2733,8 +2733,8 @@ namespace SoD } - if ((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522) + if ((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin) ) { structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index a21e7eaeb..310e18275 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -2779,8 +2779,8 @@ namespace UF } float SpawnSize = emu->size; - if (!((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522)) + if (!((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin)) ) { PacketSize -= (sizeof(structs::Texture_Struct) * EQ::textures::materialCount); @@ -2982,8 +2982,8 @@ namespace UF Buffer += sizeof(structs::Spawn_Struct_Position); - if ((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522) + if ((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin) ) { for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k) @@ -3018,8 +3018,8 @@ namespace UF VARSTRUCT_ENCODE_TYPE(uint32, Buffer, 0); } - if ((emu->NPC == 0) || (emu->race <= RACE_GNOME_12) || (emu->race == RACE_IKSAR_128) || - (emu->race == RACE_VAH_SHIR_130) || (emu->race == RACE_FROGLOK_330) || (emu->race == RACE_DRAKKIN_522) + if ((emu->NPC == 0) || (emu->race <= Race::Gnome) || (emu->race == Race::Iksar) || + (emu->race == Race::VahShir) || (emu->race == Race::Froglok2) || (emu->race == Race::Drakkin) ) { structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer; diff --git a/common/races.cpp b/common/races.cpp index 1c2ef8dec..fb1382fb7 100644 --- a/common/races.cpp +++ b/common/races.cpp @@ -70,1275 +70,1275 @@ const char* GetRaceIDName(uint16 race_id) // return "Drakkin"; // RoF2 Race Labels - case RT_ABHORRENT: + case Race::Abhorrent: return "Abhorrent"; - case RT_AIR_ELEMENTAL: - case RT_AIR_ELEMENTAL_2: + case Race::AirElemental: + case Race::AirElemental2: return "Air Elemental"; - case RT_AIR_MEPHIT: + case Race::AirMephit: return "Air Mephit"; - case RT_AKHEVA: - case RT_AKHEVA_2: + case Race::Akhevan: + case Race::Akheva: return "Akheva"; - case RT_ALARAN: + case Race::Alaran: return "Alaran"; - case RT_ALARAN_GHOST: + case Race::AlaranGhost: return "Alaran Ghost"; - case RT_ALARAN_SENTRY_STONE: + case Race::AlaranSentryStone: return "Alaran Sentry Stone"; - case RT_ALLIGATOR: - case RT_ALLIGATOR_2: + case Race::Alligator: + case Race::Alligator2: return "Alligator"; - case RT_AMYGDALAN: - case RT_AMYGDALAN_2: + case Race::Denizen: + case Race::Amygdalan: return "Amygdalan"; - case RT_ANEUK: + case Race::Aneuk: return "Aneuk"; - case RT_ANIMATED_ARMOR: + case Race::AnimatedArmor: return "Animated Armor"; - case RT_ANIMATED_HAND: + case Race::AnimatedHand: return "Animated Hand"; - case RT_ANIMATED_STATUE: - case RT_ANIMATED_STATUE_2: + case Race::AnimatedStatue: + case Race::AnimatedStatue2: return "Animated Statue"; - case RT_APEXUS: + case Race::Apexus: return "Apexus"; - case RT_ARACHNID: + case Race::Arachnid: return "Arachnid"; - case RT_ARCANIST_OF_HATE: + case Race::ArcanistOfHate: return "Arcanist of Hate"; - case RT_ARMADILLO: + case Race::Armadillo: return "Armadillo"; - case RT_ARMOR_RACK: + case Race::ArmorRack: return "Armor Rack"; - case RT_AVIAK: - case RT_AVIAK_2: + case Race::Aviak: + case Race::Aviak2: return "Aviak"; - case RT_AVIAK_PULL_ALONG: + case Race::AviakPullAlong: return "Aviak Pull Along"; - case RT_AYONAE_RO: + case Race::AyonaeRo: return "Ayonae Ro"; - case RT_BANNER: - case RT_BANNER_2: - case RT_BANNER_3: - case RT_BANNER_4: - case RT_BANNER_5: - case RT_BANNER_6: - case RT_BANNER_7: + case Race::Banner: + case Race::Banner2: + case Race::Banner3: + case Race::Banner4: + case Race::Banner5: + case Race::Banner6: + case Race::Banner7: return "Banner"; - case RT_BANNER_10TH_ANNIVERSARY: + case Race::TenthAnniversaryBanner: return "10th Anniversary Banner"; - case RT_BANSHEE: - case RT_BANSHEE_2: - case RT_BANSHEE_3: + case Race::Banshee: + case Race::Banshee2: + case Race::Banshee3: return "Banshee"; - case RT_BARBARIAN: - case RT_BARBARIAN_2: + case Race::Barbarian: + case Race::HalasCitizen: return "Barbarian"; - case RT_BARREL: + case Race::Barrel: return "Barrel"; - case RT_BARREL_BARGE_SHIP: + case Race::UndeadBoat: return "Barrel Barge Ship"; - case RT_BASILISK: + case Race::Basilisk: return "Basilisk"; - case RT_BAT: - case RT_BAT_2: - case RT_BAT_3: + case Race::GiantBat: + case Race::Bat: + case Race::Bat2: return "Bat"; - case RT_BAZU: + case Race::Bazu: return "Bazu"; - case RT_BEAR: - case RT_BEAR_2: - case RT_BEAR_3: + case Race::Bear: + case Race::Bear2: + case Race::Bear3: return "Bear"; - case RT_BEAR_MOUNT: + case Race::BearMount: return "Bear Mount"; - case RT_BEAR_TRAP: + case Race::BearTrap: return "Bear Trap"; - case RT_BEETLE: - case RT_BEETLE_2: - case RT_BEETLE_3: + case Race::Beetle: + case Race::Beetle2: + case Race::Beetle3: return "Beetle"; - case RT_BEGGAR: + case Race::HumanBeggar: return "Beggar"; - case RT_BELLIKOS: + case Race::Bellikos: return "Bellikos"; - case RT_BERTOXXULOUS: - case RT_BERTOXXULOUS_2: + case Race::Bertoxxulous: + case Race::BertoxxulousNew: return "Bertoxxulous"; - case RT_BIXIE: - case RT_BIXIE_2: + case Race::Bixie: + case Race::Bixie2: return "Bixie"; - case RT_BLIMP_SHIP: + case Race::BlimpShip: return "Blimp Ship"; - case RT_BLIND_DREAMER: + case Race::BlindDreamer: return "Blind Dreamer"; - case RT_BLOOD_RAVEN: + case Race::BloodRaven: return "Blood Raven"; - case RT_BOAT: - case RT_BOAT_2: + case Race::Boat: + case Race::Boat2: return "Boat"; - case RT_BOLVIRK: + case Race::Bolvirk: return "Bolvirk"; - case RT_BONE_GOLEM: - case RT_BONE_GOLEM_2: + case Race::BoneGolem: + case Race::BoneGolem2: return "Bone Golem"; - case RT_BONES: + case Race::Bones: return "Bones"; - case RT_BOOK_DERVISH: + case Race::BookDervish: return "Book Dervish"; - case RT_BOT_PORTAL: + case Race::Portal: return "BoT Portal"; - case RT_BOULDER: + case Race::Boulder: return "Boulder"; - case RT_BOX: + case Race::Box: return "Box"; - case RT_BRAXI: + case Race::Braxi: return "Braxi"; - case RT_BRAXI_MOUNT: + case Race::BraxiMount: return "Braxi Mount"; - case RT_BRELL: + case Race::Brell: return "Brell"; - case RT_BRELLS_FIRST_CREATION: + case Race::BrellsFirstCreation: return "Brell's First Creation"; - case RT_BRISTLEBANE: + case Race::Bristlebane: return "Bristlebane"; - case RT_BROKEN_CLOCKWORK: + case Race::BrokenClockwork: return "Broken Clockwork"; - case RT_BRONTOTHERIUM: + case Race::Brontotherium: return "Brontotherium"; - case RT_BROWNIE: - case RT_BROWNIE_2: + case Race::Brownie: + case Race::Brownie2: return "Brownie"; - case RT_BUBONIAN: + case Race::Bubonian: return "Bubonian"; - case RT_BUBONIAN_UNDERLING: + case Race::BubonianUnderling: return "Bubonian Underling"; - case RT_BURYNAI: - case RT_BURYNAI_2: + case Race::Burynai: + case Race::Burynai2: return "Burynai"; - case RT_CAKE_10TH_ANNIVERSARY: + case Race::TenthAnniversaryCake: return "10th Anniversary Cake"; - case RT_CAMPFIRE: + case Race::Campfire: return "Campfire"; - case RT_CARRIER_HAND: + case Race::CarrierHand: return "Carrier Hand"; - case RT_CAT: + case Race::Cat: return "Cat"; - case RT_CAZIC_THULE: - case RT_CAZIC_THULE_2: + case Race::CazicThule: + case Race::CazicThule2: return "Cazic Thule"; - case RT_CENTAUR: - case RT_CENTAUR_2: + case Race::Centaur: + case Race::Centaur2: return "Centaur"; - case RT_CHEST: - case RT_CHEST_2: - case RT_CHEST_3: + case Race::Chest: + case Race::Chest2: + case Race::Chest3: return "Chest"; - case RT_CHIMERA: - case RT_CHIMERA_2: + case Race::Chimera: + case Race::Chimera2: return "Chimera"; - case RT_CHOKIDAI: + case Race::Chokidai: return "Chokidai"; - case RT_CLAM: + case Race::Clam: return "Clam"; - case RT_CLIKNAR_MOUNT: + case Race::CliknarMount: return "Cliknar Mount"; - case RT_CLIKNAR_QUEEN: + case Race::CliknarQueen: return "Cliknar Queen"; - case RT_CLIKNAR_SOLDIER: + case Race::CliknarSoldier: return "Cliknar Soldier"; - case RT_CLIKNAR_WORKER: + case Race::CliknarWorker: return "Cliknar Worker"; - case RT_CLOCKWORK_BEETLE: + case Race::ClockworkBeetle: return "Clockwork Beetle"; - case RT_CLOCKWORK_BOAR: + case Race::ClockworkBoar: return "Clockwork Boar"; - case RT_CLOCKWORK_BOMB: + case Race::ClockworkBomb: return "Clockwork Bomb"; - case RT_CLOCKWORK_BRAIN: + case Race::ClockworkBrain: return "Clockwork Brain"; - case RT_CLOCKWORK_GNOME: + case Race::ClockworkGnome: return "Clockwork Gnome"; - case RT_CLOCKWORK_GOLEM: + case Race::ClockworkGolem: return "Clockwork Golem"; - case RT_CLOCKWORK_GUARDIAN: + case Race::ClockworkGuardian: return "Clockwork Guardian"; - case RT_COCKATRICE: + case Race::Cockatrice: return "Cockatrice"; - case RT_COFFIN: - case RT_COFFIN_2: + case Race::Coffin: + case Race::Coffin2: return "Coffin"; - case RT_COIN_PURSE: + case Race::CoinPurse: return "Coin Purse"; - case RT_COLDAIN: - case RT_COLDAIN_2: - case RT_COLDAIN_3: + case Race::Coldain: + case Race::Coldain2: + case Race::Coldain3: return "Coldain"; - case RT_CORAL: + case Race::Coral: return "Coral"; - case RT_CORATHUS: + case Race::Corathus: return "Corathus"; - case RT_CRAB: + case Race::Crab: return "Crab"; - case RT_CRAGBEAST: + case Race::Cragbeast: return "Cragbeast"; - case RT_CRAGSLITHER: + case Race::Cragslither: return "Cragslither"; - case RT_CROCODILE: + case Race::Crocodile: return "Crocodile"; - case RT_CRYSTAL: + case Race::Crystal: return "Crystal"; - case RT_CRYSTAL_SHARD: + case Race::CrystalShard: return "Crystal Shard"; - case RT_CRYSTAL_SPHERE: + case Race::CrystalSphere: return "Crystal Sphere"; - case RT_CRYSTAL_SPIDER: + case Race::CrystalSpider: return "Crystal Spider"; - case RT_CRYSTALSKIN_AMBULOID: + case Race::CrystalskinAmbuloid: return "Crystalskin Ambuloid"; - case RT_CRYSTALSKIN_SESSILOID: + case Race::CrystalskinSessiloid: return "Crystalskin Sessiloid"; - case RT_DAISY_MAN: + case Race::DaisyMan: return "Daisy Man"; - case RT_DARK_ELF: - case RT_DARK_ELF_2: + case Race::DarkElf: + case Race::NeriakCitizen: return "Dark Elf"; - case RT_DARK_LORD: + case Race::DarkLord: return "Dark Lord"; - case RT_DEMI_LICH: + case Race::DemiLich: return "Demi Lich"; - case RT_DEMON_VULTURE: + case Race::DemonVulture: return "Demon Vulture"; - case RT_DERVISH: - case RT_DERVISH_2: - case RT_DERVISH_3: - case RT_DERVISH_4: + case Race::Dervish: + case Race::Dervish2: + case Race::Dervish3: + case Race::Dervish4: return "Dervish"; - case RT_DERVISH_VER_5: + case Race::Dervish5: return "Dervish(Ver. 5)"; - case RT_DERVISH_VER_6: + case Race::Dervish6: return "Dervish(Ver. 6)"; - case RT_DEVOURER: + case Race::Devourer: return "Devourer"; - case RT_DIRE_WOLF: + case Race::DireWolf: return "Dire Wolf"; - case RT_DISCORD_SHIP: + case Race::DiscordShip: return "Discord Ship"; - case RT_DISCORDLING: + case Race::Discordling: return "Discordling"; - case RT_DISEASED_FIEND: + case Race::DiseasedFiend: return "Diseased Fiend"; - case RT_DJINN: + case Race::Djinn: return "Djinn"; - case RT_DRACHNID: - case RT_DRACHNID_2: + case Race::Drachnid: + case Race::Drachnid2: return "Drachnid"; - case RT_DRACHNID_COCOON: + case Race::DrachnidCocoon: return "Drachnid Cocoon"; - case RT_DRACOLICH: + case Race::Dracolich: return "Dracolich"; - case RT_DRAGLOCK: + case Race::Draglock: return "Draglock"; - case RT_DRAGON: - case RT_DRAGON_2: - case RT_DRAGON_3: - case RT_DRAGON_4: - case RT_DRAGON_5: - case RT_DRAGON_6: - case RT_DRAGON_7: - case RT_DRAGON_8: - case RT_DRAGON_9: - case RT_DRAGON_10: - case RT_DRAGON_11: - case RT_DRAGON_12: - case RT_DRAGON_13: - case RT_DRAGON_14: - case RT_DRAGON_15: - case RT_DRAGON_16: + 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 RT_DRAGON_BONES: + case Race::DragonBones: return "Dragon Bones"; - case RT_DRAGON_EGG: + case Race::DragonEgg: return "Dragon Egg"; - case RT_DRAGON_STATUE: + case Race::DragonStatue: return "Dragon Statue"; - case RT_DRAGORN: + case Race::Dragorn: return "Dragorn"; - case RT_DRAGORN_BOX: + case Race::DragornBox: return "Dragorn Box"; - case RT_DRAKE: - case RT_DRAKE_2: - case RT_DRAKE_3: + case Race::Drake: + case Race::Drake2: + case Race::Drake3: return "Drake"; - case RT_DRAKKIN: + case Race::Drakkin: return "Drakkin"; - case RT_DRIXIE: + case Race::Drixie: return "Drixie"; - case RT_DROGMORE: + case Race::Drogmor: return "Drogmore"; - case RT_DROLVARG: + case Race::Drolvarg: return "Drolvarg"; - case RT_DRYAD: + case Race::Dryad: return "Dryad"; - case RT_DWARF: - case RT_DWARF_2: + case Race::Dwarf: + case Race::KaladimCitizen: return "Dwarf"; - case RT_DYNAMITE_KEG: + case Race::DynamiteKeg: return "Dynamite Keg"; - case RT_DYNLETH: + case Race::Dynleth: return "Dyn'Leth"; - case RT_EARTH_ELEMENTAL: - case RT_EARTH_ELEMENTAL_2: + case Race::EarthElemental: + case Race::EarthElemental2: return "Earth Elemental"; - case RT_EARTH_MEPHIT: + case Race::EarthMephit: return "Earth Mephit"; - case RT_EEL: + case Race::GiantEel: return "Eel"; - case RT_EFREETI: - case RT_EFREETI_2: + case Race::Efreeti: + case Race::Efreeti2: return "Efreeti"; - case RT_ELDDAR: + case Race::Elddar: return "Elddar"; - case RT_ELEMENTAL: + case Race::Elemental: return "Elemental"; - case RT_ELK_HEAD: + case Race::ElkHead: return "Elk Head"; - case RT_ELVEN_BOAT: + case Race::ElvenBoat: return "Elven Boat"; - case RT_ELVEN_GHOST: + case Race::ElvenGhost: return "Elven Ghost"; - case RT_ENCHANTED_ARMOR: + case Race::EnchantedArmor: return "Enchanted Armor"; - case RT_EROLLISI: + case Race::Erollisi: return "Erollisi"; - case RT_ERUDITE: - case RT_ERUDITE_2: - case RT_ERUDITE_3: + case Race::Erudite: + case Race::EruditeCitizen: + case Race::Erudite2: return "Erudite"; - case RT_EVAN_TEST: + case Race::EvanTest: return "Evan Test"; - case RT_EVIL_EYE: - case RT_EVIL_EYE_2: - case RT_EVIL_EYE_3: + case Race::EvilEye: + case Race::EvilEye2: + case Race::EvilEye3: return "Evil Eye"; - case RT_EXOSKELETON: + case Race::Exoskeleton: return "Exoskeleton"; - case RT_EXPLOSIVE_CART: + case Race::ExplosiveCart: return "Explosive Cart"; - case RT_EYE: + case Race::EyeOfZomm: return "Eye"; - case RT_FAIRY: - case RT_FAIRY_2: + case Race::Fairy: + case Race::Fairy2: return "Fairy"; - case RT_FALLEN_KNIGHT: + case Race::FallenKnight: return "Fallen Knight"; - case RT_FAUN: + case Race::Faun: return "Faun"; - case RT_FAY_DRAKE: + case Race::FayDrake: return "Fay Drake"; - case RT_FENNIN_RO: + case Race::FenninRo: return "Fennin Ro"; - case RT_FERAN: + case Race::Feran: return "Feran"; - case RT_FERAN_MOUNT: + case Race::FeranMount: return "Feran Mount"; - case RT_FIEND: + case Race::Fiend: return "Fiend"; - case RT_FIRE_ELEMENTAL: - case RT_FIRE_ELEMENTAL_2: + case Race::FireElemental: + case Race::FireElemental2: return "Fire Elemental"; - case RT_FIRE_MEPHIT: + case Race::FireMephit: return "Fire Mephit"; - case RT_FISH: - case RT_FISH_2: + case Race::Fish: + case Race::KunarkFish: return "Fish"; - case RT_FLAG: + case Race::Flag: return "Flag"; - case RT_FLOATING_ISLAND: + case Race::FloatingIsland: return "Floating Island"; - case RT_FLOATING_SKULL: + case Race::FloatingSkull: return "Floating Skull"; - case RT_FLOATING_TOWER: + case Race::FloatingTower: return "Floating Tower"; - case RT_FLY: + case Race::Fly: return "Fly"; - case RT_FLYING_CARPET: + case Race::FlyingCarpet: return "Flying Carpet"; - case RT_FOREST_GIANT: + case Race::ForestGiant2: return "Forest Giant"; - case RT_FROG: - case RT_FROG_2: + case Race::Frog: + case Race::Frog2: return "Frog"; - case RT_FROGLOK: - case RT_FROGLOK_2: - case RT_FROGLOK_3: + case Race::Froglok: + case Race::FroglokGhoul: + case Race::Froglok2: return "Froglok"; - case RT_FROGLOK_GHOST: + case Race::FroglokGhost: return "Froglok Ghost"; - case RT_FROGLOK_SKELETON: + case Race::FroglokSkeleton: return "Froglok Skeleton"; - case RT_FUNGAL_FIEND: + case Race::FungalFiend: return "Fungal Fiend"; - case RT_FUNGUS_PATCH: + case Race::FungusPatch: return "Fungus Patch"; - case RT_FUNGUSMAN: + case Race::Fungusman: return "Fungusman"; - case RT_GALORIAN: + case Race::Galorian: return "Galorian"; - case RT_GARGOYLE: - case RT_GARGOYLE_2: + case Race::Gargoyle: + case Race::Gargoyle2: return "Gargoyle"; - case RT_GASBAG: + case Race::Gasbag: return "Gasbag"; - case RT_GELATINOUS_CUBE: - case RT_GELATINOUS_CUBE_2: + case Race::GelatinousCube: + case Race::GelatinousCube2: return "Gelatinous Cube"; - case RT_GELIDRAN: + case Race::Gelidran: return "Gelidran"; - case RT_GENARI: + case Race::Genari: return "Genari"; - case RT_GEONID: + case Race::Geonid: return "Geonid"; - case RT_GHOST: - case RT_GHOST_2: - case RT_GHOST_3: - case RT_GHOST_4: + case Race::Ghost: + case Race::DwarfGhost: + case Race::EruditeGhost: + case Race::PirateGhost: return "Ghost"; - case RT_GHOST_SHIP: - case RT_GHOST_SHIP_2: + case Race::GhostShip: + case Race::GhostShip2: return "Ghost Ship"; - case RT_GHOUL: - case RT_GHOUL_2: + case Race::Ghoul: + case Race::Ghoul2: return "Ghoul"; - case RT_GIANT: - case RT_GIANT_2: - case RT_GIANT_3: - case RT_GIANT_4: - case RT_GIANT_5: - case RT_GIANT_6: - case RT_GIANT_7: - case RT_GIANT_8: - case RT_GIANT_9: - case RT_GIANT_10: - case RT_GIANT_11: - case RT_GIANT_12: - case RT_GIANT_13: + 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 RT_GIANT_CLOCKWORK: + case Race::GiantClockwork: return "Giant Clockwork"; - case RT_GIANT_RALLOSIAN_MATS: + case Race::Giant4: return "Giant(Rallosian mats)"; - case RT_GIANT_SHADE: + case Race::GiantShade: return "Giant Shade"; - case RT_GIGYN: + case Race::Gigyn: return "Gigyn"; - case RT_GINGERBREAD_MAN: + case Race::GingerbreadMan: return "Gingerbread Man"; - case RT_GIRPLAN: + case Race::Girplan: return "Girplan"; - case RT_GNOLL: - case RT_GNOLL_2: - case RT_GNOLL_3: + case Race::Gnoll: + case Race::Gnoll2: + case Race::Gnoll3: return "Gnoll"; - case RT_GNOME: + case Race::Gnome: return "Gnome"; - case RT_GNOMEWORK: + case Race::Gnomework: return "Gnomework"; - case RT_GNOMISH_BALLOON: + case Race::GnomishBalloon: return "Gnomish Balloon"; - case RT_GNOMISH_BOAT: + case Race::GnomishBoat: return "Gnomish Boat"; - case RT_GNOMISH_HOVERING_TRANSPORT: + case Race::GnomishHoveringTransport: return "Gnomish Hovering Transport"; - case RT_GNOMISH_ROCKET_PACK: + case Race::GnomishRocketPack: return "Gnomish Rocket Pack"; - case RT_GOBLIN: - case RT_GOBLIN_2: - case RT_GOBLIN_3: - case RT_GOBLIN_4: - case RT_GOBLIN_5: + case Race::Goblin: + case Race::Bloodgill: + case Race::KunarkGoblin: + case Race::NewGoblin: + case Race::Goblin2: return "Goblin"; - case RT_GOD_LUCLIN_VER_2: + case Race::Luclin2: return "God - Luclin(Ver. 2)"; - case RT_GOD_LUCLIN_VER_3: + case Race::Luclin3: return "God - Luclin(Ver. 3)"; - case RT_GOD_LUCLIN_VER_4: + case Race::Luclin4: return "God - Luclin(Ver. 4)"; - case RT_GOD_OF_DISCORD: + case Race::GodOfDiscord: return "God of Discord"; - case RT_GOLEM: - case RT_GOLEM_2: + case Race::Golem: + case Race::Golem2: return "Golem"; - case RT_GOO: - case RT_GOO_2: - case RT_GOO_3: - case RT_GOO_4: + case Race::Goo: + case Race::Goo2: + case Race::Goo3: + case Race::Goo4: return "Goo"; - case RT_GORAL: + case Race::Goral: return "Goral"; - case RT_GORAL_MOUNT: + case Race::GoralMount: return "Goral Mount"; - case RT_GORGON: + case Race::Gorgon: return "Gorgon"; - case RT_GORILLA: - case RT_GORILLA_2: + case Race::Gorilla: + case Race::Gorilla2: return "Gorilla"; - case RT_GRANDFATHER_CLOCK: + case Race::GrandfatherClock: return "Grandfather Clock"; - case RT_GREKEN_YOUNG: + case Race::GrekenYoung: return "Greken - Young"; - case RT_GREKEN_YOUNG_ADULT: + case Race::GrekenYoungAdult: return "Greken - Young Adult"; - case RT_GRENDLAEN: + case Race::Grendlaen: return "Grendlaen"; - case RT_GRIEG_VENEFICUS: + case Race::GriegVeneficus: return "Grieg Veneficus"; - case RT_GRIFFIN: - case RT_GRIFFIN_2: + case Race::Griffin: + case Race::Griffin2: return "Griffin"; - case RT_GRIMLING: + case Race::Grimling: return "Grimling"; - case RT_GROUND_SHAKER: + case Race::GroundShaker: return "Ground Shaker"; - case RT_GUARD: - case RT_GUARD_2: - case RT_GUARD_3: - case RT_GUARD_4: + case Race::FreeportGuard: + case Race::Felguard: + case Race::Fayguard: + case Race::VahShirGuard: return "Guard"; - case RT_GUARD_OF_JUSTICE: + case Race::GuardOfJustice: return "Guard of Justice"; - case RT_GUARDIAN_CPU: + case Race::GuardianCpu: return "Guardian CPU"; - case RT_HADAL: + case Race::Hadal: return "Hadal"; - case RT_HAG: + case Race::Hag: return "Hag"; - case RT_HALF_ELF: + case Race::HalfElf: return "Half Elf"; - case RT_HALFLING: - case RT_HALFLING_2: + case Race::Halfling: + case Race::RivervaleCitizen: return "Halfling"; - case RT_HARPY: - case RT_HARPY_2: + case Race::Harpy: + case Race::Harpy2: return "Harpy"; - case RT_HIGH_ELF: + case Race::HighElf: return "High Elf"; - case RT_HIPPOGRIFF: + case Race::Hippogriff: return "Hippogriff"; - case RT_HOLGRESH: - case RT_HOLGRESH_2: + case Race::Holgresh: + case Race::Holgresh2: return "Holgresh"; - case RT_HONEY_POT: + case Race::HoneyPot: return "Honey Pot"; - case RT_HORSE: - case RT_HORSE_2: - case RT_HORSE_3: + case Race::Horse: + case Race::Horse2: + case Race::Horse3: return "Horse"; - case RT_HOVERING_PLATFORM: + case Race::HoveringPlatform: return "Hovering Platform"; - case RT_HRAQUIS: + case Race::Hraquis: return "Hraquis"; - case RT_HUMAN: - case RT_HUMAN_2: - case RT_HUMAN_3: - case RT_HUMAN_4: + case Race::Human: + case Race::HighpassCitizen: + case Race::QeynosCitizen: + case Race::Human2: return "Human"; - case RT_HUMAN_GHOST: + case Race::HumanGhost: return "Human Ghost"; - case RT_HUVUL: + case Race::Huvul: return "Huvul"; - case RT_HYDRA_CRYSTAL: + case Race::HydraCrystal: return "Hydra Crystal"; - case RT_HYDRA_MOUNT: + case Race::HydraMount: return "Hydra Mount"; - case RT_HYDRA_NPC: + case Race::Hydra: return "Hydra NPC"; - case RT_HYNID: + case Race::Hynid: return "Hynid"; - case RT_ICE_SPECTRE: + case Race::IceSpectre: return "Ice Spectre"; - case RT_IKAAV: + case Race::Ikaav: return "Ikaav"; - case RT_IKSAR: - case RT_IKSAR_2: + case Race::Iksar: + case Race::IksarCitizen: return "Iksar"; - case RT_IKSAR_GHOST: + case Race::IksarGhost: return "Iksar Ghost"; - case RT_IKSAR_GOLEM: + case Race::IksarGolem: return "Iksar Golem"; - case RT_IKSAR_SKELETON: + case Race::IksarSkeleton: return "Iksar Skeleton"; - case RT_IKSAR_SPIRIT: + case Race::IksarSpirit: return "Iksar Spirit"; - case RT_IMP: + case Race::Imp: return "Imp"; - case RT_INNORUUK: + case Race::Innoruuk: return "Innoruuk"; - case RT_INSECT: + case Race::Insect: return "Insect"; - case RT_INTERACTIVE_OBJECT: + case Race::InteractiveObject: return "Interactive Object"; - case RT_INVISIBLE_MAN: - case RT_INVISIBLE_MAN_2: - case RT_INVISIBLE_MAN_3: + case Race::InvisibleMan: + case Race::InvisibleMan2: + case Race::InvisibleMan3: return "Invisible Man"; - case RT_INVISIBLE_MAN_OF_ZOMM: + case Race::InvisibleManOfZomm: return "Invisible Man of Zomm"; - case RT_IXT: + case Race::Ixt: return "Ixt"; - case RT_JOKESTER: + case Race::Jokester: return "Jokester"; - case RT_JUM_JUM_BUCKET: + case Race::JumJumBucket: return "Jum Jum Bucket"; - case RT_JUNK_BEAST: + case Race::JunkBeast: return "Junk Beast"; - case RT_KANGON: + case Race::Kangon: return "Kangon"; - case RT_KANGON_MOUNT: + case Race::KangonMount: return "Kangon Mount"; - case RT_KARANA: + case Race::Karana: return "Karana"; - case RT_KEDGE: - case RT_KEDGE_2: + case Race::PhinigelAutropos: + case Race::Kedge: return "Kedge"; - case RT_KERRAN: - case RT_KERRAN_2: + case Race::Kerran: + case Race::Kerran2: return "Kerran"; - case RT_KIRIN: - case RT_KIRIN_2: + case Race::Kirin: + case Race::Kirin2: return "Kirin"; - case RT_KNIGHT_OF_HATE: + case Race::KnightOfHate: return "Knight of Hate"; - case RT_KNIGHT_OF_PESTILENCE: + case Race::KnightOfPestilence: return "Knight of Pestilence"; - case RT_KOBOLD: - case RT_KOBOLD_2: + case Race::Kobold: + case Race::Kobold2: return "Kobold"; - case RT_KRAKEN: + case Race::Kraken: return "Kraken"; - case RT_KYV: + case Race::Kyv: return "Kyv"; - case RT_LAUNCH: + case Race::Launch: return "Launch"; - case RT_LAVA_ROCK: + case Race::LavaRock: return "Lava Rock"; - case RT_LAVA_SPIDER: + case Race::LavaSpider: return "Lava Spider"; - case RT_LAVA_SPIDER_QUEEN: + case Race::LavaSpiderQueen: return "Lava Spider Queen"; - case RT_LEECH: + case Race::Leech: return "Leech"; - case RT_LEPERTOLOTH: + case Race::Lepertoloth: return "Lepertoloth"; - case RT_LIGHTCRAWLER: + case Race::Lightcrawler: return "Lightcrawler"; - case RT_LIGHTNING_WARRIOR: + case Race::LightingWarrior: return "Lightning Warrior"; - case RT_LION: + case Race::Lion: return "Lion"; - case RT_LIZARD_MAN: + case Race::LizardMan: return "Lizard Man"; - case RT_LUCLIN: + case Race::Luclin: return "Luclin"; - case RT_LUGGALD: - case RT_LUGGALD_2: + case Race::Luggald: + case Race::Luggald2: return "Luggald"; - case RT_LUGGALDS: + case Race::Luggald3: return "Luggalds"; - case RT_MALARIAN: + case Race::Malarian: return "Malarian"; - case RT_MAMMOTH: - case RT_MAMMOTH_2: + case Race::Mammoth: + case Race::Mammoth2: return "Mammoth"; - case RT_MAN_EATING_PLANT: + case Race::ManEatingPlant: return "Man - Eating Plant"; - case RT_MANSION: + case Race::Mansion: return "Mansion"; - case RT_MANTICORE: + case Race::Manticore: return "Manticore"; - case RT_MANTRAP: + case Race::Unknown5: return "Mantrap"; - case RT_MARIONETTE: + case Race::Marionette: return "Marionette"; - case RT_MASTRUQ: + case Race::Mastruq: return "Mastruq"; - case RT_MATA_MURAM: + case Race::MataMuram: return "Mata Muram"; - case RT_MEDIUM_PLANT: + case Race::Toolbox: return "Medium Plant"; - case RT_MEPHIT: + case Race::Mephit: return "Mephit"; - case RT_MERCHANT_SHIP: + case Race::MerchantShip: return "Merchant Ship"; - case RT_MERMAID: + case Race::Mermaid: return "Mermaid"; - case RT_MIMIC: + case Race::Mimic: return "Mimic"; - case RT_MINI_POM: + case Race::MiniPom: return "Mini POM"; - case RT_MINOTAUR: - case RT_MINOTAUR_2: - case RT_MINOTAUR_3: - case RT_MINOTAUR_4: + case Race::Minotaur: + case Race::Minotaur2: + case Race::Minotaur3: + case Race::Minotaur4: return "Minotaur"; - case RT_MITHANIEL_MARR: + case Race::MithanielMarr: return "Mithaniel Marr"; - case RT_MORELL_THULE: + case Race::MorellThule: return "Morell Thule"; - case RT_MOSQUITO: + case Race::Mosquito: return "Mosquito"; - case RT_MOUTH_OF_INSANITY: + case Race::MouthOfInsanity: return "Mouth of Insanity"; - case RT_MUDDITE: + case Race::Muddite: return "Muddite"; - case RT_MUMMY: + case Race::Mummy: return "Mummy"; - case RT_MURAMITE_ARMOR_PILE: + case Race::MuramiteArmorPile: return "Muramite Armor Pile"; - case RT_MURKGLIDER: + case Race::Murkglider: return "Murkglider"; - case RT_MURKGLIDER_EGG_SAC: + case Race::MurkgliderEggSack: return "Murkglider Egg Sac"; - case RT_MUTNA: + case Race::Mutna: return "Mutna"; - case RT_NEKHON: + case Race::Nekhon: return "Nekhon"; - case RT_NETHERBIAN: + case Race::Netherbian: return "Netherbian"; - case RT_NIGHTMARE: + case Race::Nightmare: return "Nightmare"; - case RT_NIGHTMARE_GARGOYLE: + case Race::NightmareGargoyle: return "Nightmare Gargoyle"; - case RT_NIGHTMARE_GOBLIN: + case Race::NightmareGoblin: return "Nightmare Goblin"; - case RT_NIGHTMARE_MEPHIT: + case Race::NightmareMephit: return "Nightmare Mephit"; - case RT_NIGHTMARE_UNICORN: - case RT_NIGHTMARE_UNICORN_2: + case Race::Unicorn2: + case Race::Unicorn3: return "Nightmare / Unicorn"; - case RT_NIGHTMARE_WRAITH: + case Race::NightmareWraith: return "Nightmare Wraith"; - case RT_NIHIL: + case Race::Nihil: return "Nihil"; - case RT_NILBORIEN: + case Race::Nilborien: return "Nilborien"; - case RT_NOC: + case Race::Noc: return "Noc"; - case RT_NYMPH: + case Race::Nymph: return "Nymph"; - case RT_OGRE: - case RT_OGRE_2: + case Race::Ogre: + case Race::OggokCitizen: return "Ogre"; - case RT_OGRE_NPC_MALE: + case Race::Ogre2: return "Ogre NPC - Male"; - case RT_ORB: + case Race::Orb: return "Orb"; - case RT_ORC: - case RT_ORC_2: + case Race::Orc: + case Race::Orc2: return "Orc"; - case RT_OTHMIR: + case Race::Othmir: return "Othmir"; - case RT_OWLBEAR: + case Race::Owlbear: return "Owlbear"; - case RT_PARASITIC_SCAVENGER: + case Race::ParasiticScavenger: return "Parasitic Scavenger"; - case RT_PEGASUS: - case RT_PEGASUS_2: - case RT_PEGASUS_3: + case Race::Pegasus: + case Race::Pegasus2: + case Race::Pegasus3: return "Pegasus"; - case RT_PHOENIX: + case Race::Phoenix: return "Phoenix"; - case RT_PIRANHA: + case Race::Piranha: return "Piranha"; - case RT_PIRATE: - case RT_PIRATE_2: - case RT_PIRATE_3: - case RT_PIRATE_4: - case RT_PIRATE_5: - case RT_PIRATE_6: - case RT_PIRATE_7: - case RT_PIRATE_8: + 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 RT_PIRATE_SHIP: + case Race::PirateShip: return "Pirate Ship"; - case RT_PIXIE: + case Race::Pixie: return "Pixie"; - case RT_POISON_FROG: + case Race::PoisonFrog: return "Poison Frog"; - case RT_PORTAL: + case Race::Portal2: return "Portal"; - case RT_POWDER_KEG: + case Race::PowderKeg: return "Powder Keg"; - case RT_PRESSURE_PLATE: + case Race::PressurePlate: return "Pressure Plate"; - case RT_PUFFER_SPORE: + case Race::PufferSpore: return "Puffer Spore"; - case RT_PUMA: - case RT_PUMA_2: - case RT_PUMA_3: + case Race::Puma: + case Race::Puma2: + case Race::Puma3: return "Puma"; - case RT_PUSLING: + case Race::Pusling: return "Pusling"; - case RT_PYRILEN: + case Race::Pyrilen: return "Pyrilen"; - case RT_RA_TUK: + case Race::Ratuk: return "Ra`tuk"; - case RT_RABBIT: + case Race::Rabbit: return "Rabbit"; - case RT_RALLOS_ZEK: - case RT_RALLOS_ZEK_2: + case Race::StatueOfRallosZek: + case Race::NewRallosZek: return "Rallos Zek"; - case RT_RALLOS_ZEK_MINION: + case Race::RallosOgre: return "Rallos Zek Minion"; - case RT_RAPTOR: - case RT_RAPTOR_2: + case Race::Raptor: + case Race::Raptor2: return "Raptor"; - case RT_RAPTOR_MOUNT: + case Race::RaptorMount: return "Raptor Mount"; - case RT_RAT: - case RT_RAT_2: + case Race::GiantRat: + case Race::Rat: return "Rat"; - case RT_RAT_MOUNT: + case Race::RatMount: return "Rat Mount"; - case RT_RATMAN: - case RT_RATMAN_2: + case Race::Ratman: + case Race::Ratman2: return "Ratman"; - case RT_REANIMATED_HAND: + case Race::ReanimatedHand: return "Reanimated Hand"; - case RT_RECUSO: + case Race::Recuso: return "Recuso"; - case RT_REGENERATION_POOL: + case Race::RegenerationPool: return "Regeneration Pool"; - case RT_RELIC_CASE: + case Race::RelicCase: return "Relic case "; - case RT_RHINO_BEETLE: + case Race::RhinoBeetle: return "Rhino Beetle"; - case RT_RHINOCEROS: + case Race::Rhinoceros: return "Rhinoceros"; - case RT_ROBOCOPTER_OF_ZOMM: + case Race::RobocopterOfZomm: return "Robocopter of Zomm"; - case RT_ROCK_PILE: + case Race::RockPile: return "Rock Pile"; - case RT_ROCKHOPPER: + case Race::Rockhopper: return "Rockhopper"; - case RT_RONNIE_TEST: + case Race::RonnieTest: return "Ronnie Test"; - case RT_ROOT_TENTACLE: + case Race::RootTentacle: return "Root Tentacle"; - case RT_ROT_DOG_MOUNT: + case Race::RotDogMount: return "Rot Dog Mount"; - case RT_ROTDOG: + case Race::RotDog: return "Rotdog"; - case RT_ROTOCOPTER: + case Race::Rotocopter: return "Rotocopter"; - case RT_ROWBOAT: + case Race::Rowboat: return "Rowboat"; - case RT_ROYAL_GUARD: + case Race::RoyalGuard: return "Royal Guard"; - case RT_RUJARKIAN_ORC: - case RT_RUJARKIAN_ORC_2: + case Race::RujarkianOrc: + case Race::MasterOrc: return "Rujarkian Orc"; - case RT_RUNED_ORB: + case Race::RunedOrb: return "Runed Orb"; - case RT_RUNIC_SYMBOL: + case Race::RunicSymbol: return "Runic Symbol"; - case RT_SABER_TOOTHED_CAT: + case Race::Sabertooth: return "Saber - toothed Cat"; - case RT_SALTPETTER_BOMB: + case Race::SaltpetterBomb: return "Saltpetter Bomb"; - case RT_SAND_ELF: + case Race::SandElf: return "Sand Elf"; - case RT_SANDMAN: + case Race::Sandman: return "Sandman"; - case RT_SARNAK: - case RT_SARNAK_2: + case Race::Sarnak: + case Race::Sarnak2: return "Sarnak"; - case RT_SARNAK_GOLEM: + case Race::SarnakGolem: return "Sarnak Golem"; - case RT_SARNAK_SPIRIT: + case Race::SarnakSpirit: return "Sarnak Spirit"; - case RT_SARYRN: + case Race::Saryrn: return "Saryrn"; - case RT_SATYR: + case Race::Satyr: return "Satyr"; - case RT_SCALED_WOLF: + case Race::ScaledWolf: return "Scaled Wolf"; - case RT_SCARECROW: - case RT_SCARECROW_2: + case Race::Scarecrow: + case Race::Scarecrow2: return "Scarecrow"; - case RT_SCARLET_CHEETAH: + case Race::ScarletCheetah: return "Scarlet Cheetah"; - case RT_SCLERA_MOUNT: + case Race::ScleraMount: return "Sclera Mount"; - case RT_SCORPION: - case RT_SCORPION_2: - case RT_SCORPION_3: + case Race::Scorpion: + case Race::IksarScorpion: + case Race::Scorpion2: return "Scorpion"; - case RT_SCRYKIN: + case Race::Scrykin: return "Scrykin"; - case RT_SEA_TURTLE: + case Race::SeaTurtle: return "Sea Turtle"; - case RT_SEAHORSE: + case Race::SeaHorse: return "Seahorse"; - case RT_SELYRAH: + case Race::Selyrah: return "Selyrah"; - case RT_SELYRAH_MOUNT: + case Race::SelyrahMount: return "Selyrah Mount"; - case RT_SERU: + case Race::LordInquisitorSeru: return "Seru"; - case RT_SERVANT_OF_SHADOW: + case Race::ServantOfShadow: return "Servant of Shadow"; - case RT_SESSILOID_MOUNT: + case Race::SessiloidMount: return "Sessiloid Mount"; - case RT_SHADE: - case RT_SHADE_2: - case RT_SHADE_3: + case Race::Shade: + case Race::Shade2: + case Race::Shade3: return "Shade"; - case RT_SHADEL: + case Race::KhatiSha: return "Shadel"; - case RT_SHAMBLING_MOUND: + case Race::ShamblingMound: return "Shambling Mound"; - case RT_SHARK: + case Race::Shark: return "Shark"; - case RT_SHIKNAR: + case Race::Shiknar: return "Shik'Nar"; - case RT_SHILISKIN: + case Race::Shiliskin: return "Shiliskin"; - case RT_SHIP: + case Race::Ship: return "Ship"; - case RT_SHIP_IN_A_BOTTLE: + case Race::ShipInABottle: return "Ship in a Bottle"; - case RT_SHISSAR: - case RT_SHISSAR_2: + case Race::Shissar: + case Race::Shissar2: return "Shissar"; - case RT_SHRIEKER: + case Race::Shrieker: return "Shrieker"; - case RT_SIREN: - case RT_SIREN_2: + case Race::Siren: + case Race::Siren2: return "Siren"; - case RT_SKELETAL_HORSE: + case Race::SkeletalHorse: return "Skeletal Horse"; - case RT_SKELETON: - case RT_SKELETON_2: - case RT_SKELETON_3: + case Race::Skeleton: + case Race::Skeleton2: + case Race::Skeleton3: return "Skeleton"; - case RT_SKUNK: + case Race::Skunk: return "Skunk"; - case RT_SKYSTRIDER: + case Race::Skystrider: return "Skystrider"; - case RT_SMALL_PLANT: + case Race::Plant2: return "Small Plant"; - case RT_SNAKE: - case RT_SNAKE_2: + case Race::GiantSnake: + case Race::Snake: return "Snake"; - case RT_SNAKE_ELEMENTAL: + case Race::SnakeElemental: return "Snake Elemental"; - case RT_SNOW_DERVISH: + case Race::SnowDervish: return "Snow Dervish"; - case RT_SNOW_RABBIT: + case Race::SnowRabbit: return "Snow Rabbit"; - case RT_SOKOKAR: + case Race::Sokokar: return "Sokokar"; - case RT_SOKOKAR_MOUNT: + case Race::SokokarMount: return "Sokokar Mount"; - case RT_SOKOKAR_W_SADDLE: + case Race::SokokarMount2: return "Sokokar(w saddle)"; - case RT_SOLUSEK_RO: - case RT_SOLUSEK_RO_2: + case Race::SolusekRo: + case Race::SolusekRo2: return "Solusek Ro"; - case RT_SOLUSEK_RO_GUARD: + case Race::SolusekRoGuard: return "Solusek Ro Guard"; - case RT_SONIC_WOLF: + case Race::SonicWolf: return "Sonic Wolf"; - case RT_SOUL_DEVOURER: + case Race::SoulDevourer: return "Soul Devourer"; - case RT_SPECTRE: - case RT_SPECTRE_2: + case Race::Spectre: + case Race::Spectre2: return "Spectre"; - case RT_SPELL_PARTICLE_1: + case Race::SpellParticle: return "Spell Particle 1"; - case RT_SPHINX: - case RT_SPHINX_2: + case Race::Sphinx: + case Race::Sphinx2: return "Sphinx"; - case RT_SPIDER: - case RT_SPIDER_2: + case Race::GiantSpider: + case Race::Spider: return "Spider"; - case RT_SPIDER_EGG_SACK: + case Race::SpiderEggSack: return "Spider Egg Sack"; - case RT_SPIDER_MOUNT: + case Race::SpiderMount: return "Spider Mount"; - case RT_SPIDER_QUEEN: + case Race::SpiderQueen: return "Spider Queen"; - case RT_SPIKE_TRAP: + case Race::SpikeTrap: return "Spike Trap"; - case RT_SPIRIT_WOLF: + case Race::SpiritWolf: return "Spirit Wolf"; - case RT_SPORALI: + case Race::Sporali: return "Sporali"; - case RT_STONE_JUG: + case Race::StoneJug: return "Stone Jug"; - case RT_STONE_PYLON: + case Race::StonePylon: return "Stone Pylon"; - case RT_STONE_RING: + case Race::StoneRing: return "Stone Ring"; - case RT_STONE_WORKER: - case RT_STONE_WORKER_2: + case Race::StoneWorker: + case Race::StoneWorker2: return "Stone Worker"; - case RT_STONEGRABBER: + case Race::Stonegrabber: return "Stonegrabber"; - case RT_STONEMITE: + case Race::Stonemite: return "Stonemite"; - case RT_STORMRIDER: + case Race::Stormrider: return "Stormrider"; - case RT_SUCCUBUS: + case Race::Succubus: return "Succubus"; - case RT_SUCCULENT: + case Race::Succulent: return "Succulent"; - case RT_SULLON_ZEK: + case Race::SullonZek: return "Sullon Zek"; - case RT_SUN_REVENANT: + case Race::Shadel: return "Sun Revenant"; - case RT_SUNFLOWER: + case Race::Sunflower: return "Sunflower"; - case RT_SWINETOR: + case Race::Swinetor: return "Swinetor"; - case RT_SWORDFISH: + case Race::Swordfish: return "Swordfish"; - case RT_SYNARCANA: + case Race::Synarcana: return "Synarcana"; - case RT_TABLE: + case Race::Table: return "Table"; - case RT_TADPOLE: + case Race::FroglokTadpole: return "Tadpole"; - case RT_TAELOSIAN: + case Race::Taelosian: return "Taelosian"; - case RT_TALL_PLANT: + case Race::WineCask: return "Tall Plant"; - case RT_TALLON_ZEK: + case Race::TallonZek: return "Tallon Zek"; - case RT_TANETH: + case Race::Taneth: return "Taneth"; - case RT_TAREW_MARR: + case Race::TarewMarr: return "Tarew Marr"; - case RT_TEGI: + case Race::Tegi: return "Tegi"; - case RT_TELEPORT_MAN: + case Race::TeleportMan: return "Teleport Man"; - case RT_TELEPORTATION_STAND: + case Race::TeleportationStand: return "Teleportation Stand"; - case RT_TELMIRA: + case Race::Telmira: return "Telmira"; - case RT_TENTACLE_TERROR: - case RT_TENTACLE_TERROR_2: + case Race::TentacleTerror: + case Race::TentacleTerror2: return "Tentacle Terror"; - case RT_TERRIS_THULE: + case Race::TerrisThule: return "Terris Thule"; - case RT_TEST_OBJECT: + case Race::TestObject: return "Test Object"; - case RT_THE_RATHE: + case Race::Rathe: return "The Rathe"; - case RT_THE_TRIBUNAL: + case Race::TribunalNew: return "The Tribunal"; - case RT_THOUGHT_HORROR: + case Race::ThoughtHorror: return "Thought Horror"; - case RT_TIGER: + case Race::Tiger: return "Tiger"; - case RT_TIN_SOLDIER: + case Race::TinSoldier: return "Tin Soldier"; - case RT_TOOLBOX: + case Race::Plant: return "Toolbox"; - case RT_TOPIARY_LION: + case Race::TopiaryLion: return "Topiary Lion"; - case RT_TOPIARY_LION_MOUNT: + case Race::TopiaryLionMount: return "Topiary Lion Mount"; - case RT_TORMENTOR: + case Race::Tormentor: return "Tormentor"; - case RT_TOTEM: - case RT_TOTEM_2: + case Race::Totem: + case Race::Totem2: return "Totem"; - case RT_TRAKANON: + case Race::Trakanon: return "Trakanon"; - case RT_TRANQUILION: + case Race::Tranquilion: return "Tranquilion"; - case RT_TREANT: - case RT_TREANT_2: - case RT_TREANT_3: + case Race::Treant: + case Race::Treant2: + case Race::Treant3: return "Treant"; - case RT_TRIBUNAL: + case Race::Tribunal: return "Tribunal"; - case RT_TRIUMVIRATE: + case Race::Triumvirate: return "Triumvirate"; - case RT_TROLL: - case RT_TROLL_2: - case RT_TROLL_3: - case RT_TROLL_4: - case RT_TROLL_5: + case Race::Troll: + case Race::GrobbCitizen: + case Race::TrollCrewMember: + case Race::PirateDeckhand: + case Race::BrokenSkullPirate: return "Troll"; - case RT_TROLL_ZOMBIE: + case Race::TrollZombie: return "Troll Zombie"; - case RT_TRUSIK: + case Race::Trusik: return "Trusik"; - case RT_TSETSIAN: + case Race::Tsetsian: return "Tsetsian"; - case RT_TUMBLEWEED: + case Race::Tumbleweed: return "Tumbleweed"; - case RT_TUNARE: + case Race::Tunare: return "Tunare"; - case RT_TUREPTA: + case Race::Turepta: return "Turepta"; - case RT_UKUN: + case Race::Ukun: return "Ukun"; - case RT_ULTHORK: + case Race::Ulthork: return "Ulthork"; - case RT_UNDEAD_CHOKIDAI: + case Race::UndeadChokidai: return "Undead Chokidai"; - case RT_UNDEAD_FOOTMAN: + case Race::UndeadFootman: return "Undead Footman"; - case RT_UNDEAD_FROGLOK: + case Race::UndeadFroglok: return "Undead Froglok"; - case RT_UNDEAD_IKSAR: + case Race::UndeadIksar: return "Undead Iksar"; - case RT_UNDEAD_KNIGHT: + case Race::UndeadKnight: return "Undead Knight"; - case RT_UNDEAD_SARNAK: + case Race::UndeadSarnak: return "Undead Sarnak"; - case RT_UNDEAD_VEKSAR: + case Race::UndeadVeksar: return "Undead Veksar"; - case RT_UNDERBULK: + case Race::Underbulk: return "Underbulk"; - case RT_UNICORN: + case Race::Unicorn: return "Unicorn"; - case RT_UNKNOWN_RACE: - case RT_UNKNOWN_RACE_2: - case RT_UNKNOWN_RACE_3: - case RT_UNKNOWN_RACE_4: - case RT_UNKNOWN_RACE_5: - case RT_UNKNOWN_RACE_6: - case RT_UNKNOWN_RACE_7: + 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 RT_VAH_SHIR: - case RT_VAH_SHIR_2: + case Race::VahShir: + case Race::VahShirKing: return "Vah Shir"; - case RT_VAH_SHIR_SKELETON: + case Race::VahShirSkeleton: return "Vah Shir Skeleton"; - case RT_VALLON_ZEK: + case Race::VallonZek: return "Vallon Zek"; - case RT_VALORIAN: - case RT_VALORIAN_2: + case Race::Valorian: + case Race::Valorian2: return "Valorian"; - case RT_VAMPIRE: - case RT_VAMPIRE_2: - case RT_VAMPIRE_3: - case RT_VAMPIRE_4: - case RT_VAMPIRE_5: - case RT_VAMPIRE_6: - case RT_VAMPIRE_7: - case RT_VAMPIRE_8: + 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 RT_VASE: + case Race::Vase: return "Vase"; - case RT_VEGEROG: + case Race::Vegerog: return "Vegerog"; - case RT_VEKSAR: - case RT_VEKSAR_2: - case RT_VEKSAR_3: + case Race::Veksar: + case Race::Veksar2: + case Race::Veksar3: return "Veksar"; - case RT_VENRIL_SATHIR: + case Race::VenrilSathir: return "Venril Sathir"; - case RT_VINE_MAW: + case Race::VineMaw: return "Vine Maw"; - case RT_WAGON: + case Race::Wagon: return "Wagon"; - case RT_WALRUS: + case Race::Walrus: return "Walrus"; - case RT_WAR_BOAR: - case RT_WAR_BOAR_2: + case Race::WarBoar: + case Race::WarBoar2: return "War Boar"; - case RT_WAR_WRAITH: + case Race::WarWraith: return "War Wraith"; - case RT_WASP: + case Race::Wasp: return "Wasp"; - case RT_WATER_ELEMENTAL: - case RT_WATER_ELEMENTAL_2: + case Race::WaterElemental: + case Race::WaterElemental2: return "Water Elemental"; - case RT_WATER_MEPHIT: + case Race::WaterMephit: return "Water Mephit"; - case RT_WATER_SPOUT: + case Race::WaterSpout: return "Water Spout"; - case RT_WEAPON_RACK: - case RT_WEAPON_RACK_2: + case Race::WeaponRack: + case Race::WeaponRack2: return "Weapon Rack"; - case RT_WEB: + case Race::Web: return "Web"; - case RT_WEDDING_ALTAR: + case Race::WeddingAltar: return "Wedding Altar"; - case RT_WEDDING_ARBOR: + case Race::WeddingArbor: return "Wedding Arbor"; - case RT_WEDDING_FLOWERS: + case Race::WeddingFlowers: return "Wedding Flowers"; - case RT_WEREORC: + case Race::Wereorc: return "Wereorc"; - case RT_WEREWOLF: - case RT_WEREWOLF_2: - case RT_WEREWOLF_3: + case Race::Werewolf: + case Race::Werewolf2: + case Race::Werewolf3: return "Werewolf"; - case RT_WETFANG_MINNOW: + case Race::WetfangMinnow: return "Wetfang Minnow"; - case RT_WHIRLIGIG: + case Race::Whirligig: return "Whirligig"; - case RT_WICKER_BASKET: + case Race::WickerBasket: return "Wicker Basket"; - case RT_WILL_O_WISP: + case Race::Wisp: return "Will - O - Wisp"; - case RT_WINE_CASK: - case RT_WINE_CASK_2: + case Race::StoneJug2: + case Race::WineCask2: return "Wine Cask"; - case RT_WITHERAN: - case RT_WITHERAN_2: + case Race::Witheran: + case Race::Witheran2: return "Witheran"; - case RT_WOLF: - case RT_WOLF_2: - case RT_WOLF_3: + case Race::Wolf: + case Race::WolfElemental: + case Race::Wolf2: return "Wolf"; - case RT_WOOD_ELF: + case Race::WoodElf: return "Wood Elf"; - case RT_WORG: - case RT_WORG_2: + case Race::Worg: + case Race::Worg2: return "Worg"; - case RT_WORM: + case Race::Worm: return "Worm"; - case RT_WRETCH: + case Race::Wretch: return "Wretch"; - case RT_WRULON: - case RT_WRULON_2: + case Race::Wrulon: + case Race::Wrulon2: return "Wrulon"; - case RT_WURM: - case RT_WURM_2: + case Race::Wurm: + case Race::Wurm2: return "Wurm"; - case RT_WURM_MOUNT: + case Race::WurmMount: return "Wurm Mount"; - case RT_WYVERN: - case RT_WYVERN_2: + case Race::Wyvern: + case Race::Wyvern2: return "Wyvern"; - case RT_XALGOZ: + case Race::Xalgoz: return "Xalgoz"; - case RT_XARIC_THE_UNSPOKEN: + case Race::Xaric: return "Xaric the Unspoken"; - case RT_XEGONY: + case Race::Xegony: return "Xegony"; - case RT_YAKKAR: + case Race::Yakkar: return "Yakkar"; - case RT_YETI: + case Race::Yeti: return "Yeti"; - case RT_ZEBUXORUK: + case Race::Zebuxoruk: return "Zebuxoruk"; - case RT_ZEBUXORUKS_CAGE: + case Race::ZebuxoruksCage: return "Zebuxoruk's Cage"; - case RT_ZELNIAK: + case Race::Zelniak: return "Zelniak"; - case RT_ZOMBIE: - case RT_ZOMBIE_2: + case Race::Zombie: + case Race::Zombie2: return "Zombie"; default: return "UNKNOWN RACE"; @@ -2255,37 +2255,37 @@ const std::string GetPlayerRaceAbbreviation(uint16 race_id) } switch (race_id) { - case RACE_HUMAN_1: + case Race::Human: return "HUM"; - case RACE_BARBARIAN_2: + case Race::Barbarian: return "BAR"; - case RACE_ERUDITE_3: + case Race::Erudite: return "ERU"; - case RACE_WOOD_ELF_4: + case Race::WoodElf: return "ELF"; - case RACE_HIGH_ELF_5: + case Race::HighElf: return "HIE"; - case RACE_DARK_ELF_6: + case Race::DarkElf: return "DEF"; - case RACE_HALF_ELF_7: + case Race::HalfElf: return "HEF"; - case RACE_DWARF_8: + case Race::Dwarf: return "DWF"; - case RACE_TROLL_9: + case Race::Troll: return "TRL"; - case RACE_OGRE_10: + case Race::Ogre: return "OGR"; - case RACE_HALFLING_11: + case Race::Halfling: return "HFL"; - case RACE_GNOME_12: + case Race::Gnome: return "GNM"; - case RACE_IKSAR_128: + case Race::Iksar: return "IKS"; - case RACE_VAH_SHIR_130: + case Race::VahShir: return "VAH"; - case RACE_FROGLOK_330: + case Race::Froglok2: return "FRG"; - case RACE_DRAKKIN_522: + case Race::Drakkin: return "DRK"; } @@ -2294,10 +2294,10 @@ const std::string GetPlayerRaceAbbreviation(uint16 race_id) bool IsPlayerRace(uint16 race_id) { return ( - EQ::ValueWithin(race_id, RACE_HUMAN_1, RACE_GNOME_12) || - race_id == RACE_IKSAR_128 || - race_id == RACE_VAH_SHIR_130 || - race_id == RACE_FROGLOK_330 || - race_id == RACE_DRAKKIN_522 + EQ::ValueWithin(race_id, Race::Human, Race::Gnome) || + race_id == Race::Iksar || + race_id == Race::VahShir || + race_id == Race::Froglok2 || + race_id == Race::Drakkin ); } diff --git a/common/races.h b/common/races.h index 3ec25e4f9..ad16566a2 100644 --- a/common/races.h +++ b/common/races.h @@ -114,742 +114,6 @@ #define PLAYER_RACE_ALL_MASK 65535 -#define RT_ABHORRENT 193 -#define RT_AIR_ELEMENTAL 210 -#define RT_AIR_ELEMENTAL_2 475 -#define RT_AIR_MEPHIT 291 -#define RT_AKHEVA 230 -#define RT_AKHEVA_2 722 -#define RT_ALARAN 695 -#define RT_ALARAN_GHOST 708 -#define RT_ALARAN_SENTRY_STONE 703 -#define RT_ALLIGATOR 91 -#define RT_ALLIGATOR_2 479 -#define RT_AMYGDALAN 99 -#define RT_AMYGDALAN_2 663 -#define RT_ANEUK 395 -#define RT_ANIMATED_ARMOR 323 -#define RT_ANIMATED_HAND 166 -#define RT_ANIMATED_STATUE 442 -#define RT_ANIMATED_STATUE_2 448 -#define RT_APEXUS 637 -#define RT_ARACHNID 326 -#define RT_ARCANIST_OF_HATE 352 -#define RT_ARMADILLO 87 -#define RT_ARMOR_RACK 535 -#define RT_AVIAK 13 -#define RT_AVIAK_2 558 -#define RT_AVIAK_PULL_ALONG 711 -#define RT_AYONAE_RO 498 -#define RT_BANNER 500 -#define RT_BANNER_2 553 -#define RT_BANNER_3 554 -#define RT_BANNER_4 555 -#define RT_BANNER_5 556 -#define RT_BANNER_6 557 -#define RT_BANNER_7 586 -#define RT_BANNER_10TH_ANNIVERSARY 628 -#define RT_BANSHEE 250 -#define RT_BANSHEE_2 487 -#define RT_BANSHEE_3 488 -#define RT_BARBARIAN 2 -#define RT_BARBARIAN_2 90 -#define RT_BARREL 377 -#define RT_BARREL_BARGE_SHIP 546 -#define RT_BASILISK 436 -#define RT_BAT 34 -#define RT_BAT_2 260 -#define RT_BAT_3 416 -#define RT_BAZU 409 -#define RT_BEAR 43 -#define RT_BEAR_2 305 -#define RT_BEAR_3 480 -#define RT_BEAR_MOUNT 655 -#define RT_BEAR_TRAP 503 -#define RT_BEETLE 22 -#define RT_BEETLE_2 559 -#define RT_BEETLE_3 716 -#define RT_BEGGAR 55 -#define RT_BELLIKOS 638 -#define RT_BERTOXXULOUS 152 -#define RT_BERTOXXULOUS_2 255 -#define RT_BIXIE 79 -#define RT_BIXIE_2 520 -#define RT_BLIMP_SHIP 693 -#define RT_BLIND_DREAMER 669 -#define RT_BLOOD_RAVEN 279 -#define RT_BOAT 141 -#define RT_BOAT_2 533 -#define RT_BOLVIRK 486 -#define RT_BONE_GOLEM 362 -#define RT_BONE_GOLEM_2 491 -#define RT_BONES 383 -#define RT_BOOK_DERVISH 660 -#define RT_BOT_PORTAL 329 -#define RT_BOULDER 585 -#define RT_BOX 376 -#define RT_BRAXI 688 -#define RT_BRAXI_MOUNT 676 -#define RT_BRELL 640 -#define RT_BRELLS_FIRST_CREATION 639 -#define RT_BRISTLEBANE 153 -#define RT_BROKEN_CLOCKWORK 274 -#define RT_BRONTOTHERIUM 169 -#define RT_BROWNIE 15 -#define RT_BROWNIE_2 568 -#define RT_BUBONIAN 268 -#define RT_BUBONIAN_UNDERLING 269 -#define RT_BURYNAI 144 -#define RT_BURYNAI_2 602 -#define RT_CAKE_10TH_ANNIVERSARY 629 -#define RT_CAMPFIRE 567 -#define RT_CARRIER_HAND 721 -#define RT_CAT 713 -#define RT_CAZIC_THULE 95 -#define RT_CAZIC_THULE_2 670 -#define RT_CENTAUR 16 -#define RT_CENTAUR_2 521 -#define RT_CHEST 378 -#define RT_CHEST_2 589 -#define RT_CHEST_3 590 -#define RT_CHIMERA 412 -#define RT_CHIMERA_2 582 -#define RT_CHOKIDAI 356 -#define RT_CLAM 115 -#define RT_CLIKNAR_MOUNT 652 -#define RT_CLIKNAR_QUEEN 642 -#define RT_CLIKNAR_SOLDIER 643 -#define RT_CLIKNAR_WORKER 644 -#define RT_CLOCKWORK_BEETLE 276 -#define RT_CLOCKWORK_BOAR 472 -#define RT_CLOCKWORK_BOMB 504 -#define RT_CLOCKWORK_BRAIN 249 -#define RT_CLOCKWORK_GNOME 88 -#define RT_CLOCKWORK_GOLEM 248 -#define RT_CLOCKWORK_GUARDIAN 572 -#define RT_COCKATRICE 96 -#define RT_COFFIN 382 -#define RT_COFFIN_2 592 -#define RT_COIN_PURSE 427 -#define RT_COLDAIN 183 -#define RT_COLDAIN_2 645 -#define RT_COLDAIN_3 646 -#define RT_CORAL 460 -#define RT_CORATHUS 459 -#define RT_CRAB 302 -#define RT_CRAGBEAST 390 -#define RT_CRAGSLITHER 597 -#define RT_CROCODILE 259 -#define RT_CRYSTAL 591 -#define RT_CRYSTAL_SHARD 425 -#define RT_CRYSTAL_SPHERE 616 -#define RT_CRYSTAL_SPIDER 327 -#define RT_CRYSTALSKIN_AMBULOID 641 -#define RT_CRYSTALSKIN_SESSILOID 647 -#define RT_DAISY_MAN 97 -#define RT_DARK_ELF 6 -#define RT_DARK_ELF_2 77 -#define RT_DARK_LORD 466 -#define RT_DEMI_LICH 45 -#define RT_DEMON_VULTURE 620 -#define RT_DERVISH 100 -#define RT_DERVISH_2 372 -#define RT_DERVISH_3 431 -#define RT_DERVISH_4 704 -#define RT_DERVISH_VER_5 726 -#define RT_DERVISH_VER_6 727 -#define RT_DEVOURER 159 -#define RT_DIRE_WOLF 171 -#define RT_DISCORD_SHIP 404 -#define RT_DISCORDLING 418 -#define RT_DISEASED_FIEND 253 -#define RT_DJINN 126 -#define RT_DRACHNID 57 -#define RT_DRACHNID_2 461 -#define RT_DRACHNID_COCOON 462 -#define RT_DRACOLICH 604 -#define RT_DRAGLOCK 132 -#define RT_DRAGON 49 -#define RT_DRAGON_2 122 -#define RT_DRAGON_3 165 -#define RT_DRAGON_4 184 -#define RT_DRAGON_5 192 -#define RT_DRAGON_6 195 -#define RT_DRAGON_7 196 -#define RT_DRAGON_8 198 -#define RT_DRAGON_9 304 -#define RT_DRAGON_10 435 -#define RT_DRAGON_11 437 -#define RT_DRAGON_12 438 -#define RT_DRAGON_13 452 -#define RT_DRAGON_14 530 -#define RT_DRAGON_15 531 -#define RT_DRAGON_16 569 -#define RT_DRAGON_BONES 423 -#define RT_DRAGON_EGG 445 -#define RT_DRAGON_STATUE 446 -#define RT_DRAGORN 413 -#define RT_DRAGORN_BOX 421 -#define RT_DRAKE 89 -#define RT_DRAKE_2 430 -#define RT_DRAKE_3 432 -#define RT_DRAKKIN 522 -#define RT_DRIXIE 113 -#define RT_DROGMORE 348 -#define RT_DROLVARG 133 -#define RT_DRYAD 243 -#define RT_DWARF 8 -#define RT_DWARF_2 94 -#define RT_DYNAMITE_KEG 505 -#define RT_DYNLETH 532 -#define RT_EARTH_ELEMENTAL 209 -#define RT_EARTH_ELEMENTAL_2 476 -#define RT_EARTH_MEPHIT 292 -#define RT_EEL 35 -#define RT_EFREETI 101 -#define RT_EFREETI_2 320 -#define RT_ELDDAR 489 -#define RT_ELEMENTAL 75 -#define RT_ELK_HEAD 714 -#define RT_ELVEN_BOAT 544 -#define RT_ELVEN_GHOST 587 -#define RT_ENCHANTED_ARMOR 175 -#define RT_EROLLISI 150 -#define RT_ERUDITE 3 -#define RT_ERUDITE_2 78 -#define RT_ERUDITE_3 678 -#define RT_EVAN_TEST 204 -#define RT_EVIL_EYE 21 -#define RT_EVIL_EYE_2 375 -#define RT_EVIL_EYE_3 469 -#define RT_EXOSKELETON 570 -#define RT_EXPLOSIVE_CART 692 -#define RT_EYE 108 -#define RT_FAIRY 25 -#define RT_FAIRY_2 473 -#define RT_FALLEN_KNIGHT 719 -#define RT_FAUN 182 -#define RT_FAY_DRAKE 154 -#define RT_FENNIN_RO 284 -#define RT_FERAN 410 -#define RT_FERAN_MOUNT 623 -#define RT_FIEND 300 -#define RT_FIRE_ELEMENTAL 212 -#define RT_FIRE_ELEMENTAL_2 477 -#define RT_FIRE_MEPHIT 293 -#define RT_FISH 24 -#define RT_FISH_2 148 -#define RT_FLAG 501 -#define RT_FLOATING_ISLAND 596 -#define RT_FLOATING_SKULL 512 -#define RT_FLOATING_TOWER 691 -#define RT_FLY 245 -#define RT_FLYING_CARPET 720 -#define RT_FOREST_GIANT 490 -#define RT_FROG 343 -#define RT_FROG_2 603 -#define RT_FROGLOK 26 -#define RT_FROGLOK_2 27 -#define RT_FROGLOK_3 330 -#define RT_FROGLOK_GHOST 371 -#define RT_FROGLOK_SKELETON 349 -#define RT_FUNGAL_FIEND 218 -#define RT_FUNGUS_PATCH 463 -#define RT_FUNGUSMAN 28 -#define RT_GALORIAN 228 -#define RT_GARGOYLE 29 -#define RT_GARGOYLE_2 464 -#define RT_GASBAG 30 -#define RT_GELATINOUS_CUBE 31 -#define RT_GELATINOUS_CUBE_2 712 -#define RT_GELIDRAN 417 -#define RT_GENARI 648 -#define RT_GEONID 178 -#define RT_GHOST 32 -#define RT_GHOST_2 117 -#define RT_GHOST_3 118 -#define RT_GHOST_4 334 -#define RT_GHOST_SHIP 114 -#define RT_GHOST_SHIP_2 552 -#define RT_GHOUL 33 -#define RT_GHOUL_2 571 -#define RT_GIANT 18 -#define RT_GIANT_2 140 -#define RT_GIANT_3 188 -#define RT_GIANT_4 189 -#define RT_GIANT_5 306 -#define RT_GIANT_6 307 -#define RT_GIANT_7 308 -#define RT_GIANT_8 309 -#define RT_GIANT_9 310 -#define RT_GIANT_10 311 -#define RT_GIANT_11 312 -#define RT_GIANT_12 453 -#define RT_GIANT_13 523 -#define RT_GIANT_CLOCKWORK 275 -#define RT_GIANT_RALLOSIAN_MATS 626 -#define RT_GIANT_SHADE 526 -#define RT_GIGYN 649 -#define RT_GINGERBREAD_MAN 666 -#define RT_GIRPLAN 419 -#define RT_GNOLL 39 -#define RT_GNOLL_2 524 -#define RT_GNOLL_3 617 -#define RT_GNOME 12 -#define RT_GNOMEWORK 457 -#define RT_GNOMISH_BALLOON 683 -#define RT_GNOMISH_BOAT 545 -#define RT_GNOMISH_HOVERING_TRANSPORT 685 -#define RT_GNOMISH_ROCKET_PACK 684 -#define RT_GOBLIN 40 -#define RT_GOBLIN_2 59 -#define RT_GOBLIN_3 137 -#define RT_GOBLIN_4 369 -#define RT_GOBLIN_5 433 -#define RT_GOD_LUCLIN_VER_2 728 -#define RT_GOD_LUCLIN_VER_3 729 -#define RT_GOD_LUCLIN_VER_4 731 -#define RT_GOD_OF_DISCORD 622 -#define RT_GOLEM 17 -#define RT_GOLEM_2 374 -#define RT_GOO 145 -#define RT_GOO_2 547 -#define RT_GOO_3 548 -#define RT_GOO_4 549 -#define RT_GORAL 687 -#define RT_GORAL_MOUNT 673 -#define RT_GORGON 121 -#define RT_GORILLA 41 -#define RT_GORILLA_2 560 -#define RT_GRANDFATHER_CLOCK 665 -#define RT_GREKEN_YOUNG 651 -#define RT_GREKEN_YOUNG_ADULT 650 -#define RT_GRENDLAEN 701 -#define RT_GRIEG_VENEFICUS 231 -#define RT_GRIFFIN 47 -#define RT_GRIFFIN_2 525 -#define RT_GRIMLING 202 -#define RT_GROUND_SHAKER 233 -#define RT_GUARD 44 -#define RT_GUARD_2 106 -#define RT_GUARD_3 112 -#define RT_GUARD_4 239 -#define RT_GUARD_OF_JUSTICE 251 -#define RT_GUARDIAN_CPU 593 -#define RT_HADAL 698 -#define RT_HAG 185 -#define RT_HALF_ELF 7 -#define RT_HALFLING 11 -#define RT_HALFLING_2 81 -#define RT_HARPY 111 -#define RT_HARPY_2 527 -#define RT_HIGH_ELF 5 -#define RT_HIPPOGRIFF 186 -#define RT_HOLGRESH 168 -#define RT_HOLGRESH_2 715 -#define RT_HONEY_POT 536 -#define RT_HORSE 216 -#define RT_HORSE_2 492 -#define RT_HORSE_3 518 -#define RT_HOVERING_PLATFORM 699 -#define RT_HRAQUIS 261 -#define RT_HUMAN 1 -#define RT_HUMAN_2 67 -#define RT_HUMAN_3 71 -#define RT_HUMAN_4 566 -#define RT_HUMAN_GHOST 588 -#define RT_HUVUL 400 -#define RT_HYDRA_CRYSTAL 615 -#define RT_HYDRA_MOUNT 631 -#define RT_HYDRA_NPC 632 -#define RT_HYNID 388 -#define RT_ICE_SPECTRE 174 -#define RT_IKAAV 394 -#define RT_IKSAR 128 -#define RT_IKSAR_2 139 -#define RT_IKSAR_GHOST 605 -#define RT_IKSAR_GOLEM 160 -#define RT_IKSAR_SKELETON 606 -#define RT_IKSAR_SPIRIT 147 -#define RT_IMP 46 -#define RT_INNORUUK 123 -#define RT_INSECT 370 -#define RT_INTERACTIVE_OBJECT 2250 -#define RT_INVISIBLE_MAN 127 -#define RT_INVISIBLE_MAN_2 681 -#define RT_INVISIBLE_MAN_3 690 -#define RT_INVISIBLE_MAN_OF_ZOMM 600 -#define RT_IXT 393 -#define RT_JOKESTER 384 -#define RT_JUM_JUM_BUCKET 537 -#define RT_JUNK_BEAST 273 -#define RT_KANGON 689 -#define RT_KANGON_MOUNT 677 -#define RT_KARANA 278 -#define RT_KEDGE 103 -#define RT_KEDGE_2 561 -#define RT_KERRAN 23 -#define RT_KERRAN_2 562 -#define RT_KIRIN 434 -#define RT_KIRIN_2 583 -#define RT_KNIGHT_OF_HATE 351 -#define RT_KNIGHT_OF_PESTILENCE 266 -#define RT_KOBOLD 48 -#define RT_KOBOLD_2 455 -#define RT_KRAKEN 315 -#define RT_KYV 396 -#define RT_LAUNCH 73 -#define RT_LAVA_ROCK 447 -#define RT_LAVA_SPIDER 450 -#define RT_LAVA_SPIDER_QUEEN 451 -#define RT_LEECH 104 -#define RT_LEPERTOLOTH 267 -#define RT_LIGHTCRAWLER 223 -#define RT_LIGHTNING_WARRIOR 407 -#define RT_LION 50 -#define RT_LIZARD_MAN 51 -#define RT_LUCLIN 724 -#define RT_LUGGALD 345 -#define RT_LUGGALD_2 346 -#define RT_LUGGALDS 347 -#define RT_MALARIAN 265 -#define RT_MAMMOTH 107 -#define RT_MAMMOTH_2 528 -#define RT_MAN_EATING_PLANT 162 -#define RT_MANSION 595 -#define RT_MANTICORE 172 -#define RT_MANTRAP 573 -#define RT_MARIONETTE 659 -#define RT_MASTRUQ 402 -#define RT_MATA_MURAM 406 -#define RT_MEDIUM_PLANT 541 -#define RT_MEPHIT 607 -#define RT_MERCHANT_SHIP 550 -#define RT_MERMAID 110 -#define RT_MIMIC 52 -#define RT_MINI_POM 252 -#define RT_MINOTAUR 53 -#define RT_MINOTAUR_2 420 -#define RT_MINOTAUR_3 470 -#define RT_MINOTAUR_4 574 -#define RT_MITHANIEL_MARR 296 -#define RT_MORELL_THULE 658 -#define RT_MOSQUITO 134 -#define RT_MOUTH_OF_INSANITY 281 -#define RT_MUDDITE 608 -#define RT_MUMMY 368 -#define RT_MURAMITE_ARMOR_PILE 424 -#define RT_MURKGLIDER 414 -#define RT_MURKGLIDER_EGG_SAC 429 -#define RT_MUTNA 401 -#define RT_NEKHON 614 -#define RT_NETHERBIAN 229 -#define RT_NIGHTMARE 287 -#define RT_NIGHTMARE_GARGOYLE 280 -#define RT_NIGHTMARE_GOBLIN 277 -#define RT_NIGHTMARE_MEPHIT 294 -#define RT_NIGHTMARE_UNICORN 517 -#define RT_NIGHTMARE_UNICORN_2 519 -#define RT_NIGHTMARE_WRAITH 264 -#define RT_NIHIL 385 -#define RT_NILBORIEN 317 -#define RT_NOC 397 -#define RT_NYMPH 242 -#define RT_OGRE 10 -#define RT_OGRE_2 93 -#define RT_OGRE_NPC_MALE 624 -#define RT_ORB 730 -#define RT_ORC 54 -#define RT_ORC_2 458 -#define RT_OTHMIR 190 -#define RT_OWLBEAR 206 -#define RT_PARASITIC_SCAVENGER 700 -#define RT_PEGASUS 125 -#define RT_PEGASUS_2 493 -#define RT_PEGASUS_3 732 -#define RT_PHOENIX 303 -#define RT_PIRANHA 74 -#define RT_PIRATE 335 -#define RT_PIRATE_2 336 -#define RT_PIRATE_3 337 -#define RT_PIRATE_4 338 -#define RT_PIRATE_5 339 -#define RT_PIRATE_6 340 -#define RT_PIRATE_7 341 -#define RT_PIRATE_8 342 -#define RT_PIRATE_SHIP 551 -#define RT_PIXIE 56 -#define RT_POISON_FROG 316 -#define RT_PORTAL 426 -#define RT_POWDER_KEG 636 -#define RT_PRESSURE_PLATE 506 -#define RT_PUFFER_SPORE 507 -#define RT_PUMA 76 -#define RT_PUMA_2 439 -#define RT_PUMA_3 584 -#define RT_PUSLING 270 -#define RT_PYRILEN 411 -#define RT_RA_TUK 398 -#define RT_RABBIT 668 -#define RT_RALLOS_ZEK 66 -#define RT_RALLOS_ZEK_2 288 -#define RT_RALLOS_ZEK_MINION 325 -#define RT_RAPTOR 163 -#define RT_RAPTOR_2 609 -#define RT_RAPTOR_MOUNT 680 -#define RT_RAT 36 -#define RT_RAT_2 415 -#define RT_RAT_MOUNT 656 -#define RT_RATMAN 156 -#define RT_RATMAN_2 718 -#define RT_REANIMATED_HAND 80 -#define RT_RECUSO 237 -#define RT_REGENERATION_POOL 705 -#define RT_RELIC_CASE 707 -#define RT_RHINO_BEETLE 207 -#define RT_RHINOCEROS 135 -#define RT_ROBOCOPTER_OF_ZOMM 601 -#define RT_ROCK_PILE 428 -#define RT_ROCKHOPPER 200 -#define RT_RONNIE_TEST 197 -#define RT_ROOT_TENTACLE 509 -#define RT_ROT_DOG_MOUNT 672 -#define RT_ROTDOG 662 -#define RT_ROTOCOPTER 577 -#define RT_ROWBOAT 502 -#define RT_ROYAL_GUARD 667 -#define RT_RUJARKIAN_ORC 361 -#define RT_RUJARKIAN_ORC_2 366 -#define RT_RUNED_ORB 422 -#define RT_RUNIC_SYMBOL 510 -#define RT_SABER_TOOTHED_CAT 119 -#define RT_SALTPETTER_BOMB 511 -#define RT_SAND_ELF 364 -#define RT_SANDMAN 664 -#define RT_SARNAK 131 -#define RT_SARNAK_2 610 -#define RT_SARNAK_GOLEM 164 -#define RT_SARNAK_SPIRIT 146 -#define RT_SARYRN 283 -#define RT_SATYR 529 -#define RT_SCALED_WOLF 481 -#define RT_SCARECROW 82 -#define RT_SCARECROW_2 575 -#define RT_SCARLET_CHEETAH 221 -#define RT_SCLERA_MOUNT 675 -#define RT_SCORPION 129 -#define RT_SCORPION_2 149 -#define RT_SCORPION_3 611 -#define RT_SCRYKIN 495 -#define RT_SEA_TURTLE 194 -#define RT_SEAHORSE 116 -#define RT_SELYRAH 686 -#define RT_SELYRAH_MOUNT 674 -#define RT_SERU 236 -#define RT_SERVANT_OF_SHADOW 723 -#define RT_SESSILOID_MOUNT 657 -#define RT_SHADE 224 -#define RT_SHADE_2 373 -#define RT_SHADE_3 576 -#define RT_SHADEL 205 -#define RT_SHAMBLING_MOUND 494 -#define RT_SHARK 61 -#define RT_SHIKNAR 199 -#define RT_SHILISKIN 467 -#define RT_SHIP 72 -#define RT_SHIP_IN_A_BOTTLE 702 -#define RT_SHISSAR 217 -#define RT_SHISSAR_2 563 -#define RT_SHRIEKER 227 -#define RT_SIREN 187 -#define RT_SIREN_2 564 -#define RT_SKELETAL_HORSE 282 -#define RT_SKELETON 60 -#define RT_SKELETON_2 367 -#define RT_SKELETON_3 484 -#define RT_SKUNK 83 -#define RT_SKYSTRIDER 709 -#define RT_SMALL_PLANT 540 -#define RT_SNAKE 37 -#define RT_SNAKE_2 468 -#define RT_SNAKE_ELEMENTAL 84 -#define RT_SNOW_DERVISH 170 -#define RT_SNOW_RABBIT 176 -#define RT_SOKOKAR 618 -#define RT_SOKOKAR_MOUNT 625 -#define RT_SOKOKAR_W_SADDLE 627 -#define RT_SOLUSEK_RO 58 -#define RT_SOLUSEK_RO_2 247 -#define RT_SOLUSEK_RO_GUARD 254 -#define RT_SONIC_WOLF 232 -#define RT_SOUL_DEVOURER 286 -#define RT_SPECTRE 85 -#define RT_SPECTRE_2 485 -#define RT_SPELL_PARTICLE_1 599 -#define RT_SPHINX 86 -#define RT_SPHINX_2 565 -#define RT_SPIDER 38 -#define RT_SPIDER_2 440 -#define RT_SPIDER_EGG_SACK 449 -#define RT_SPIDER_MOUNT 654 -#define RT_SPIDER_QUEEN 441 -#define RT_SPIKE_TRAP 513 -#define RT_SPIRIT_WOLF 483 -#define RT_SPORALI 456 -#define RT_STONE_JUG 539 -#define RT_STONE_PYLON 619 -#define RT_STONE_RING 508 -#define RT_STONE_WORKER 387 -#define RT_STONE_WORKER_2 405 -#define RT_STONEGRABBER 220 -#define RT_STONEMITE 391 -#define RT_STORMRIDER 272 -#define RT_SUCCUBUS 408 -#define RT_SUCCULENT 167 -#define RT_SULLON_ZEK 499 -#define RT_SUN_REVENANT 226 -#define RT_SUNFLOWER 225 -#define RT_SWINETOR 696 -#define RT_SWORDFISH 105 -#define RT_SYNARCANA 363 -#define RT_TABLE 380 -#define RT_TADPOLE 102 -#define RT_TAELOSIAN 403 -#define RT_TALL_PLANT 542 -#define RT_TALLON_ZEK 290 -#define RT_TANETH 399 -#define RT_TAREW_MARR 246 -#define RT_TEGI 215 -#define RT_TELEPORT_MAN 240 -#define RT_TELEPORTATION_STAND 706 -#define RT_TELMIRA 653 -#define RT_TENTACLE_TERROR 68 -#define RT_TENTACLE_TERROR_2 578 -#define RT_TERRIS_THULE 257 -#define RT_TEST_OBJECT 301 -#define RT_THE_RATHE 298 -#define RT_THE_TRIBUNAL 256 -#define RT_THOUGHT_HORROR 214 -#define RT_TIGER 63 -#define RT_TIN_SOLDIER 263 -#define RT_TOOLBOX 538 -#define RT_TOPIARY_LION 661 -#define RT_TOPIARY_LION_MOUNT 671 -#define RT_TORMENTOR 285 -#define RT_TOTEM 173 -#define RT_TOTEM_2 514 -#define RT_TRAKANON 19 -#define RT_TRANQUILION 262 -#define RT_TREANT 64 -#define RT_TREANT_2 244 -#define RT_TREANT_3 496 -#define RT_TRIBUNAL 151 -#define RT_TRIUMVIRATE 697 -#define RT_TROLL 9 -#define RT_TROLL_2 92 -#define RT_TROLL_3 331 -#define RT_TROLL_4 332 -#define RT_TROLL_5 333 -#define RT_TROLL_ZOMBIE 344 -#define RT_TRUSIK 386 -#define RT_TSETSIAN 612 -#define RT_TUMBLEWEED 694 -#define RT_TUNARE 62 -#define RT_TUREPTA 389 -#define RT_UKUN 392 -#define RT_ULTHORK 191 -#define RT_UNDEAD_CHOKIDAI 357 -#define RT_UNDEAD_FOOTMAN 324 -#define RT_UNDEAD_FROGLOK 350 -#define RT_UNDEAD_IKSAR 161 -#define RT_UNDEAD_KNIGHT 297 -#define RT_UNDEAD_SARNAK 155 -#define RT_UNDEAD_VEKSAR 358 -#define RT_UNDERBULK 201 -#define RT_UNICORN 124 -#define RT_UNKNOWN_RACE 0 -#define RT_UNKNOWN_RACE_2 142 -#define RT_UNKNOWN_RACE_3 143 -#define RT_UNKNOWN_RACE_4 179 -#define RT_UNKNOWN_RACE_5 180 -#define RT_UNKNOWN_RACE_6 443 -#define RT_UNKNOWN_RACE_7 444 -#define RT_VAH_SHIR 130 -#define RT_VAH_SHIR_2 238 -#define RT_VAH_SHIR_SKELETON 234 -#define RT_VALLON_ZEK 289 -#define RT_VALORIAN 318 -#define RT_VALORIAN_2 322 -#define RT_VAMPIRE 65 -#define RT_VAMPIRE_2 98 -#define RT_VAMPIRE_3 208 -#define RT_VAMPIRE_4 219 -#define RT_VAMPIRE_5 359 -#define RT_VAMPIRE_6 360 -#define RT_VAMPIRE_7 365 -#define RT_VAMPIRE_8 497 -#define RT_VASE 379 -#define RT_VEGEROG 258 -#define RT_VEKSAR 353 -#define RT_VEKSAR_2 354 -#define RT_VEKSAR_3 355 -#define RT_VENRIL_SATHIR 20 -#define RT_VINE_MAW 717 -#define RT_WAGON 621 -#define RT_WALRUS 177 -#define RT_WAR_BOAR 319 -#define RT_WAR_BOAR_2 321 -#define RT_WAR_WRAITH 313 -#define RT_WASP 109 -#define RT_WATER_ELEMENTAL 211 -#define RT_WATER_ELEMENTAL_2 478 -#define RT_WATER_MEPHIT 271 -#define RT_WATER_SPOUT 710 -#define RT_WEAPON_RACK 381 -#define RT_WEAPON_RACK_2 534 -#define RT_WEB 515 -#define RT_WEDDING_ALTAR 635 -#define RT_WEDDING_ARBOR 634 -#define RT_WEDDING_FLOWERS 633 -#define RT_WEREORC 579 -#define RT_WEREWOLF 14 -#define RT_WEREWOLF_2 241 -#define RT_WEREWOLF_3 454 -#define RT_WETFANG_MINNOW 213 -#define RT_WHIRLIGIG 682 -#define RT_WICKER_BASKET 516 -#define RT_WILL_O_WISP 69 -#define RT_WINE_CASK 543 -#define RT_WINE_CASK_2 630 -#define RT_WITHERAN 465 -#define RT_WITHERAN_2 474 -#define RT_WOLF 42 -#define RT_WOLF_2 120 -#define RT_WOLF_3 482 -#define RT_WOOD_ELF 4 -#define RT_WORG 580 -#define RT_WORG_2 594 -#define RT_WORM 203 -#define RT_WRETCH 235 -#define RT_WRULON 314 -#define RT_WRULON_2 598 -#define RT_WURM 158 -#define RT_WURM_2 613 -#define RT_WURM_MOUNT 679 -#define RT_WYVERN 157 -#define RT_WYVERN_2 581 -#define RT_XALGOZ 136 -#define RT_XARIC_THE_UNSPOKEN 725 -#define RT_XEGONY 299 -#define RT_YAKKAR 181 -#define RT_YETI 138 -#define RT_ZEBUXORUK 295 -#define RT_ZEBUXORUKS_CAGE 328 -#define RT_ZELNIAK 222 -#define RT_ZOMBIE 70 -#define RT_ZOMBIE_2 471 - - const char* GetRaceIDName(uint16 race_id); const char* GetPlayerRaceName(uint32 player_race_value); const char* GetGenderName(uint32 gender_id); @@ -882,741 +146,745 @@ namespace PlayerAppearance bool IsValidWoad(uint16 race_id, uint8 gender_id, uint8 woad_value, bool use_luclin = true); } -#define RACE_DOUG_0 0 -#define RACE_HUMAN_1 1 -#define RACE_BARBARIAN_2 2 -#define RACE_ERUDITE_3 3 -#define RACE_WOOD_ELF_4 4 -#define RACE_HIGH_ELF_5 5 -#define RACE_DARK_ELF_6 6 -#define RACE_HALF_ELF_7 7 -#define RACE_DWARF_8 8 -#define RACE_TROLL_9 9 -#define RACE_OGRE_10 10 -#define RACE_HALFLING_11 11 -#define RACE_GNOME_12 12 -#define RACE_AVIAK_13 13 -#define RACE_WEREWOLF_14 14 -#define RACE_BROWNIE_15 15 -#define RACE_CENTAUR_16 16 -#define RACE_GOLEM_17 17 -#define RACE_GIANT_18 18 -#define RACE_TRAKANON_19 19 -#define RACE_VENRIL_SATHIR_20 20 -#define RACE_EVIL_EYE_21 21 -#define RACE_BEETLE_22 22 -#define RACE_KERRAN_23 23 -#define RACE_FISH_24 24 -#define RACE_FAIRY_25 25 -#define RACE_FROGLOK_26 26 -#define RACE_FROGLOK_GHOUL_27 27 -#define RACE_FUNGUSMAN_28 28 -#define RACE_GARGOYLE_29 29 -#define RACE_GASBAG_30 30 -#define RACE_GELATINOUS_CUBE_31 31 -#define RACE_GHOST_32 32 -#define RACE_GHOUL_33 33 -#define RACE_GIANT_BAT_34 34 -#define RACE_GIANT_EEL_35 35 -#define RACE_GIANT_RAT_36 36 -#define RACE_GIANT_SNAKE_37 37 -#define RACE_GIANT_SPIDER_38 38 -#define RACE_GNOLL_39 39 -#define RACE_GOBLIN_40 40 -#define RACE_GORILLA_41 41 -#define RACE_WOLF_42 42 -#define RACE_BEAR_43 43 -#define RACE_FREEPORT_GUARD_44 44 -#define RACE_DEMI_LICH_45 45 -#define RACE_IMP_46 46 -#define RACE_GRIFFIN_47 47 -#define RACE_KOBOLD_48 48 -#define RACE_LAVA_DRAGON_49 49 -#define RACE_LION_50 50 -#define RACE_LIZARD_MAN_51 51 -#define RACE_MIMIC_52 52 -#define RACE_MINOTAUR_53 53 -#define RACE_ORC_54 54 -#define RACE_HUMAN_BEGGAR_55 55 -#define RACE_PIXIE_56 56 -#define RACE_DRACNID_57 57 -#define RACE_SOLUSEK_RO_58 58 -#define RACE_BLOODGILL_59 59 -#define RACE_SKELETON_60 60 -#define RACE_SHARK_61 61 -#define RACE_TUNARE_62 62 -#define RACE_TIGER_63 63 -#define RACE_TREANT_64 64 -#define RACE_VAMPIRE_65 65 -#define RACE_STATUE_OF_RALLOS_ZEK_66 66 -#define RACE_HIGHPASS_CITIZEN_67 67 -#define RACE_TENTACLE_68 68 -#define RACE_WISP_69 69 -#define RACE_ZOMBIE_70 70 -#define RACE_QEYNOS_CITIZEN_71 71 -#define RACE_SHIP_72 72 -#define RACE_LAUNCH_73 73 -#define RACE_PIRANHA_74 74 -#define RACE_ELEMENTAL_75 75 -#define RACE_PUMA_76 76 -#define RACE_NERIAK_CITIZEN_77 77 -#define RACE_ERUDITE_CITIZEN_78 78 -#define RACE_BIXIE_79 79 -#define RACE_REANIMATED_HAND_80 80 -#define RACE_RIVERVALE_CITIZEN_81 81 -#define RACE_SCARECROW_82 82 -#define RACE_SKUNK_83 83 -#define RACE_SNAKE_ELEMENTAL_84 84 -#define RACE_SPECTRE_85 85 -#define RACE_SPHINX_86 86 -#define RACE_ARMADILLO_87 87 -#define RACE_CLOCKWORK_GNOME_88 88 -#define RACE_DRAKE_89 89 -#define RACE_HALAS_CITIZEN_90 90 -#define RACE_ALLIGATOR_91 91 -#define RACE_GROBB_CITIZEN_92 92 -#define RACE_OGGOK_CITIZEN_93 93 -#define RACE_KALADIM_CITIZEN_94 94 -#define RACE_CAZIC_THULE_95 95 -#define RACE_COCKATRICE_96 96 -#define RACE_DAISY_MAN_97 97 -#define RACE_ELF_VAMPIRE_98 98 -#define RACE_DENIZEN_99 99 -#define RACE_DERVISH_100 100 -#define RACE_EFREETI_101 101 -#define RACE_FROGLOK_TADPOLE_102 102 -#define RACE_PHINIGEL_AUTROPOS_103 103 -#define RACE_LEECH_104 104 -#define RACE_SWORDFISH_105 105 -#define RACE_FELGUARD_106 106 -#define RACE_MAMMOTH_107 107 -#define RACE_EYE_OF_ZOMM_108 108 -#define RACE_WASP_109 109 -#define RACE_MERMAID_110 110 -#define RACE_HARPIE_111 111 -#define RACE_FAYGUARD_112 112 -#define RACE_DRIXIE_113 113 -#define RACE_GHOST_SHIP_114 114 -#define RACE_CLAM_115 115 -#define RACE_SEA_HORSE_116 116 -#define RACE_DWARF_GHOST_117 117 -#define RACE_ERUDITE_GHOST_118 118 -#define RACE_SABERTOOTH_119 119 -#define RACE_WOLF_ELEMENTAL_120 120 -#define RACE_GORGON_121 121 -#define RACE_DRAGON_SKELETON_122 122 -#define RACE_INNORUUK_123 123 -#define RACE_UNICORN_124 124 -#define RACE_PEGASUS_125 125 -#define RACE_DJINN_126 126 -#define RACE_INVISIBLE_MAN_127 127 -#define RACE_IKSAR_128 128 -#define RACE_SCORPION_129 129 -#define RACE_VAH_SHIR_130 130 -#define RACE_SARNAK_131 131 -#define RACE_DRAGLOCK_132 132 -#define RACE_LYCANTHROPE_133 133 -#define RACE_MOSQUITO_134 134 -#define RACE_RHINO_135 135 -#define RACE_XALGOZ_136 136 -#define RACE_KUNARK_GOBLIN_137 137 -#define RACE_YETI_138 138 -#define RACE_IKSAR_CITIZEN_139 139 -#define RACE_FOREST_GIANT_140 140 -#define RACE_BOAT_141 141 -#define RACE_MINOR_ILLUSION_142 142 -#define RACE_TREE_ILLUSION_143 143 -#define RACE_BURYNAI_144 144 -#define RACE_GOO_145 145 -#define RACE_SPECTRAL_SARNAK_146 146 -#define RACE_SPECTRAL_IKSAR_147 147 -#define RACE_KUNARK_FISH_148 148 -#define RACE_IKSAR_SCORPION_149 149 -#define RACE_EROLLISI_150 150 -#define RACE_TRIBUNAL_151 151 -#define RACE_BERTOXXULOUS_152 152 -#define RACE_BRISTLEBANE_153 153 -#define RACE_FAY_DRAKE_154 154 -#define RACE_SARNAK_SKELETON_155 155 -#define RACE_RATMAN_156 156 -#define RACE_WYVERN_157 157 -#define RACE_WURM_158 158 -#define RACE_DEVOURER_159 159 -#define RACE_IKSAR_GOLEM_160 160 -#define RACE_IKSAR_SKELETON_161 161 -#define RACE_MAN_EATING_PLANT_162 162 -#define RACE_RAPTOR_163 163 -#define RACE_SARNAK_GOLEM_164 164 -#define RACE_WATER_DRAGON_165 165 -#define RACE_IKSAR_HAND_166 166 -#define RACE_SUCCULENT_167 167 -#define RACE_HOLGRESH_168 168 -#define RACE_BRONTOTHERIUM_169 169 -#define RACE_SNOW_DERVISH_170 170 -#define RACE_DIRE_WOLF_171 171 -#define RACE_MANTICORE_172 172 -#define RACE_TOTEM_173 173 -#define RACE_COLD_SPECTRE_174 174 -#define RACE_ENCHANTED_ARMOR_175 175 -#define RACE_SNOW_BUNNY_176 176 -#define RACE_WALRUS_177 177 -#define RACE_ROCK_GEM_MAN_178 178 -#define RACE_UNKNOWN179_179 179 -#define RACE_UNKNOWN180_180 180 -#define RACE_YAK_MAN_181 181 -#define RACE_FAUN_182 182 -#define RACE_COLDAIN_183 183 -#define RACE_VELIOUS_DRAGON_184 184 -#define RACE_HAG_185 185 -#define RACE_HIPPOGRIFF_186 186 -#define RACE_SIREN_187 187 -#define RACE_FROST_GIANT_188 188 -#define RACE_STORM_GIANT_189 189 -#define RACE_OTTERMAN_190 190 -#define RACE_WALRUS_MAN_191 191 -#define RACE_CLOCKWORK_DRAGON_192 192 -#define RACE_ABHORRENT_193 193 -#define RACE_SEA_TURTLE_194 194 -#define RACE_BLACK_AND_WHITE_DRAGON_195 195 -#define RACE_GHOST_DRAGON_196 196 -#define RACE_RONNIE_TEST_197 197 -#define RACE_PRISMATIC_DRAGON_198 198 -#define RACE_SHIKNAR_199 199 -#define RACE_ROCKHOPPER_200 200 -#define RACE_UNDERBULK_201 201 -#define RACE_GRIMLING_202 202 -#define RACE_VACUUM_WORM_203 203 -#define RACE_EVAN_TEST_204 204 -#define RACE_KAHLI_SHAH_205 205 -#define RACE_OWLBEAR_206 206 -#define RACE_RHINO_BEETLE_207 207 -#define RACE_VAMPYRE_208 208 -#define RACE_EARTH_ELEMENTAL_209 209 -#define RACE_AIR_ELEMENTAL_210 210 -#define RACE_WATER_ELEMENTAL_211 211 -#define RACE_FIRE_ELEMENTAL_212 212 -#define RACE_WETFANG_MINNOW_213 213 -#define RACE_THOUGHT_HORROR_214 214 -#define RACE_TEGI_215 215 -#define RACE_HORSE_216 216 -#define RACE_SHISSAR_217 217 -#define RACE_FUNGAL_FIEND_218 218 -#define RACE_VAMPIRE_VOLATALIS_219 219 -#define RACE_STONEGRABBER_220 220 -#define RACE_SCARLET_CHEETAH_221 221 -#define RACE_ZELNIAK_222 222 -#define RACE_LIGHTCRAWLER_223 223 -#define RACE_SHADE_224 224 -#define RACE_SUNFLOWER_225 225 -#define RACE_KHATI_SHA_226 226 -#define RACE_SHRIEKER_227 227 -#define RACE_GALORIAN_228 228 -#define RACE_NETHERBIAN_229 229 -#define RACE_AKHEVAN_230 230 -#define RACE_SPIRE_SPIRIT_231 231 -#define RACE_SONIC_WOLF_232 232 -#define RACE_GROUND_SHAKER_233 233 -#define RACE_VAH_SHIR_SKELETON_234 234 -#define RACE_MUTANT_HUMANOID_235 235 -#define RACE_LORD_INQUISITOR_SERU_236 236 -#define RACE_RECUSO_237 237 -#define RACE_VAH_SHIR_KING_238 238 -#define RACE_VAH_SHIR_GUARD_239 239 -#define RACE_TELEPORT_MAN_240 240 -#define RACE_LUJEIN_241 241 -#define RACE_NAIAD_242 242 -#define RACE_NYMPH_243 243 -#define RACE_ENT_244 244 -#define RACE_WRINNFLY_245 245 -#define RACE_COIRNAV_246 246 -#define RACE_SOLUSEK_RO_247 247 -#define RACE_CLOCKWORK_GOLEM_248 248 -#define RACE_CLOCKWORK_BRAIN_249 249 -#define RACE_SPECTRAL_BANSHEE_250 250 -#define RACE_GUARD_OF_JUSTICE_251 251 -#define RACE_POM_CASTLE_252 252 -#define RACE_DISEASE_BOSS_253 253 -#define RACE_SOLUSEK_RO_GUARD_254 254 -#define RACE_BERTOXXULOUS_NEW_255 255 -#define RACE_TRIBUNAL_NEW_256 256 -#define RACE_TERRIS_THULE_257 257 -#define RACE_VEGEROG_258 258 -#define RACE_CROCODILE_259 259 -#define RACE_BAT_260 260 -#define RACE_SLARGHILUG_261 261 -#define RACE_TRANQUILION_262 262 -#define RACE_TIN_SOLDIER_263 263 -#define RACE_NIGHTMARE_WRAITH_264 264 -#define RACE_MALARIAN_265 265 -#define RACE_KNIGHT_OF_PESTILENCE_266 266 -#define RACE_LEPERTOLOTH_267 267 -#define RACE_BUBONIAN_BOSS_268 268 -#define RACE_BUBONIAN_UNDERLING_269 269 -#define RACE_PUSLING_270 270 -#define RACE_WATER_MEPHIT_271 271 -#define RACE_STORMRIDER_272 272 -#define RACE_JUNK_BEAST_273 273 -#define RACE_BROKEN_CLOCKWORK_274 274 -#define RACE_GIANT_CLOCKWORK_275 275 -#define RACE_CLOCKWORK_BEETLE_276 276 -#define RACE_NIGHTMARE_GOBLIN_277 277 -#define RACE_KARANA_278 278 -#define RACE_BLOOD_RAVEN_279 279 -#define RACE_NIGHTMARE_GARGOYLE_280 280 -#define RACE_MOUTH_OF_INSANITY_281 281 -#define RACE_SKELETAL_HORSE_282 282 -#define RACE_SARYRN_283 283 -#define RACE_FENNIN_RO_284 284 -#define RACE_TORMENTOR_285 285 -#define RACE_NECROMANCER_PRIEST_286 286 -#define RACE_NIGHTMARE_287 287 -#define RACE_NEW_RALLOS_ZEK_288 288 -#define RACE_VALLON_ZEK_289 289 -#define RACE_TALLON_ZEK_290 290 -#define RACE_AIR_MEPHIT_291 291 -#define RACE_EARTH_MEPHIT_292 292 -#define RACE_FIRE_MEPHIT_293 293 -#define RACE_NIGHTMARE_MEPHIT_294 294 -#define RACE_ZEBUXORUK_295 295 -#define RACE_MITHANIEL_MARR_296 296 -#define RACE_KNIGHTMARE_RIDER_297 297 -#define RACE_RATHE_COUNCILMAN_298 298 -#define RACE_XEGONY_299 299 -#define RACE_DEMON_300 300 -#define RACE_TEST_OBJECT_301 301 -#define RACE_LOBSTER_MONSTER_302 302 -#define RACE_PHOENIX_303 303 -#define RACE_QUARM_304 304 -#define RACE_NEW_BEAR_305 305 -#define RACE_EARTH_GOLEM_306 306 -#define RACE_IRON_GOLEM_307 307 -#define RACE_STORM_GOLEM_308 308 -#define RACE_AIR_GOLEM_309 309 -#define RACE_WOOD_GOLEM_310 310 -#define RACE_FIRE_GOLEM_311 311 -#define RACE_WATER_GOLEM_312 312 -#define RACE_VEILED_GARGOYLE_313 313 -#define RACE_LYNX_314 314 -#define RACE_SQUID_315 315 -#define RACE_FROG_316 316 -#define RACE_FLYING_SERPENT_317 317 -#define RACE_TACTICS_SOLDIER_318 318 -#define RACE_ARMORED_BOAR_319 319 -#define RACE_DJINNI_320 320 -#define RACE_BOAR_321 321 -#define RACE_KNIGHT_OF_MARR_322 322 -#define RACE_ARMOR_OF_MARR_323 323 -#define RACE_NIGHTMARE_KNIGHT_324 324 -#define RACE_RALLOS_OGRE_325 325 -#define RACE_ARACHNID_326 326 -#define RACE_CRYSTAL_ARACHNID_327 327 -#define RACE_TOWER_MODEL_328 328 -#define RACE_PORTAL_329 329 -#define RACE_FROGLOK_330 330 -#define RACE_TROLL_CREW_MEMBER_331 331 -#define RACE_PIRATE_DECKHAND_332 332 -#define RACE_BROKEN_SKULL_PIRATE_333 333 -#define RACE_PIRATE_GHOST_334 334 -#define RACE_ONE_ARMED_PIRATE_335 335 -#define RACE_SPIRITMASTER_NADOX_336 336 -#define RACE_BROKEN_SKULL_TASKMASTER_337 337 -#define RACE_GNOME_PIRATE_338 338 -#define RACE_DARK_ELF_PIRATE_339 339 -#define RACE_OGRE_PIRATE_340 340 -#define RACE_HUMAN_PIRATE_341 341 -#define RACE_ERUDITE_PIRATE_342 342 -#define RACE_FROG_343 343 -#define RACE_UNDEAD_PIRATE_344 344 -#define RACE_LUGGALD_WORKER_345 345 -#define RACE_LUGGALD_SOLDIER_346 346 -#define RACE_LUGGALD_DISCIPLE_347 347 -#define RACE_DROGMOR_348 348 -#define RACE_FROGLOK_SKELETON_349 349 -#define RACE_UNDEAD_FROGLOK_350 350 -#define RACE_KNIGHT_OF_HATE_351 351 -#define RACE_WARLOCK_OF_HATE_352 352 -#define RACE_HIGHBORN_353 353 -#define RACE_HIGHBORN_DIVINER_354 354 -#define RACE_HIGHBORN_CRUSADER_355 355 -#define RACE_CHOKIDAI_356 356 -#define RACE_UNDEAD_CHOKIDAI_357 357 -#define RACE_UNDEAD_VEKSAR_358 358 -#define RACE_UNDEAD_VAMPIRE_359 359 -#define RACE_VAMPIRE_360 360 -#define RACE_RUJARKIAN_ORC_361 361 -#define RACE_BONE_GOLEM_362 362 -#define RACE_SYNARCANA_363 363 -#define RACE_SAND_ELF_364 364 -#define RACE_MASTER_VAMPIRE_365 365 -#define RACE_MASTER_ORC_366 366 -#define RACE_NEW_SKELETON_367 367 -#define RACE_CRYPT_CREEPER_368 368 -#define RACE_NEW_GOBLIN_369 369 -#define RACE_BURROWER_BUG_370 370 -#define RACE_FROGLOK_GHOST_371 371 -#define RACE_VORTEX_372 372 -#define RACE_SHADOW_373 373 -#define RACE_GOLEM_BEAST_374 374 -#define RACE_WATCHFUL_EYE_375 375 -#define RACE_BOX_376 376 -#define RACE_BARREL_377 377 -#define RACE_CHEST_378 378 -#define RACE_VASE_379 379 -#define RACE_FROZEN_TABLE_380 380 -#define RACE_WEAPON_RACK_381 381 -#define RACE_COFFIN_382 382 -#define RACE_SKULL_AND_BONES_383 383 -#define RACE_JESTER_384 384 -#define RACE_TAELOSIAN_NATIVE_385 385 -#define RACE_TAELOSIAN_EVOKER_386 386 -#define RACE_TAELOSIAN_GOLEM_387 387 -#define RACE_TAELOSIAN_WOLF_388 388 -#define RACE_TAELOSIAN_AMPHIBIAN_CREATURE_389 389 -#define RACE_TAELOSIAN_MOUNTAIN_BEAST_390 390 -#define RACE_TAELOSIAN_STONEMITE_391 391 -#define RACE_UKUN_WAR_HOUND_392 392 -#define RACE_IXT_CENTAUR_393 393 -#define RACE_IKAAV_SNAKEWOMAN_394 394 -#define RACE_ANEUK_395 395 -#define RACE_KYV_HUNTER_396 396 -#define RACE_NOC_SPRAYBLOOD_397 397 -#define RACE_RATUK_BRUTE_398 398 -#define RACE_IXT_399 399 -#define RACE_HUVUL_400 400 -#define RACE_MASTRUQ_WARFIEND_401 401 -#define RACE_MASTRUQ_402 402 -#define RACE_TAELOSIAN_403 403 -#define RACE_SHIP_404 404 -#define RACE_NEW_GOLEM_405 405 -#define RACE_OVERLORD_MATA_MURAM_406 406 -#define RACE_LIGHTING_WARRIOR_407 407 -#define RACE_SUCCUBUS_408 408 -#define RACE_BAZU_409 409 -#define RACE_FERAN_410 410 -#define RACE_PYRILEN_411 411 -#define RACE_CHIMERA_412 412 -#define RACE_DRAGORN_413 413 -#define RACE_MURKGLIDER_414 414 -#define RACE_RAT_415 415 -#define RACE_BAT_416 416 -#define RACE_GELIDRAN_417 417 -#define RACE_DISCORDLING_418 418 -#define RACE_GIRPLAN_419 419 -#define RACE_MINOTAUR_420 420 -#define RACE_DRAGORN_BOX_421 421 -#define RACE_RUNED_ORB_422 422 -#define RACE_DRAGON_BONES_423 423 -#define RACE_MURAMITE_ARMOR_PILE_424 424 -#define RACE_CRYSTAL_SHARD_425 425 -#define RACE_PORTAL_426 426 -#define RACE_COIN_PURSE_427 427 -#define RACE_ROCK_PILE_428 428 -#define RACE_MURKGLIDER_EGG_SACK_429 429 -#define RACE_DRAKE_430 430 -#define RACE_DERVISH_431 431 -#define RACE_DRAKE_432 432 -#define RACE_GOBLIN_433 433 -#define RACE_KIRIN_434 434 -#define RACE_DRAGON_435 435 -#define RACE_BASILISK_436 436 -#define RACE_DRAGON_437 437 -#define RACE_DRAGON_438 438 -#define RACE_PUMA_439 439 -#define RACE_SPIDER_440 440 -#define RACE_SPIDER_QUEEN_441 441 -#define RACE_ANIMATED_STATUE_442 442 -#define RACE_UNKNOWN443_443 443 -#define RACE_UNKNOWN444_444 444 -#define RACE_DRAGON_EGG_445 445 -#define RACE_DRAGON_STATUE_446 446 -#define RACE_LAVA_ROCK_447 447 -#define RACE_ANIMATED_STATUE_448 448 -#define RACE_SPIDER_EGG_SACK_449 449 -#define RACE_LAVA_SPIDER_450 450 -#define RACE_LAVA_SPIDER_QUEEN_451 451 -#define RACE_DRAGON_452 452 -#define RACE_GIANT_453 453 -#define RACE_WEREWOLF_454 454 -#define RACE_KOBOLD_455 455 -#define RACE_SPORALI_456 456 -#define RACE_GNOMEWORK_457 457 -#define RACE_ORC_458 458 -#define RACE_CORATHUS_459 459 -#define RACE_CORAL_460 460 -#define RACE_DRACHNID_461 461 -#define RACE_DRACHNID_COCOON_462 462 -#define RACE_FUNGUS_PATCH_463 463 -#define RACE_GARGOYLE_464 464 -#define RACE_WITHERAN_465 465 -#define RACE_DARK_LORD_466 466 -#define RACE_SHILISKIN_467 467 -#define RACE_SNAKE_468 468 -#define RACE_EVIL_EYE_469 469 -#define RACE_MINOTAUR_470 470 -#define RACE_ZOMBIE_471 471 -#define RACE_CLOCKWORK_BOAR_472 472 -#define RACE_FAIRY_473 473 -#define RACE_WITHERAN_474 474 -#define RACE_AIR_ELEMENTAL_475 475 -#define RACE_EARTH_ELEMENTAL_476 476 -#define RACE_FIRE_ELEMENTAL_477 477 -#define RACE_WATER_ELEMENTAL_478 478 -#define RACE_ALLIGATOR_479 479 -#define RACE_BEAR_480 480 -#define RACE_SCALED_WOLF_481 481 -#define RACE_WOLF_482 482 -#define RACE_SPIRIT_WOLF_483 483 -#define RACE_SKELETON_484 484 -#define RACE_SPECTRE_485 485 -#define RACE_BOLVIRK_486 486 -#define RACE_BANSHEE_487 487 -#define RACE_BANSHEE_488 488 -#define RACE_ELDDAR_489 489 -#define RACE_FOREST_GIANT_490 490 -#define RACE_BONE_GOLEM_491 491 -#define RACE_HORSE_492 492 -#define RACE_PEGASUS_493 493 -#define RACE_SHAMBLING_MOUND_494 494 -#define RACE_SCRYKIN_495 495 -#define RACE_TREANT_496 496 -#define RACE_VAMPIRE_497 497 -#define RACE_AYONAE_RO_498 498 -#define RACE_SULLON_ZEK_499 499 -#define RACE_BANNER_500 500 -#define RACE_FLAG_501 501 -#define RACE_ROWBOAT_502 502 -#define RACE_BEAR_TRAP_503 503 -#define RACE_CLOCKWORK_BOMB_504 504 -#define RACE_DYNAMITE_KEG_505 505 -#define RACE_PRESSURE_PLATE_506 506 -#define RACE_PUFFER_SPORE_507 507 -#define RACE_STONE_RING_508 508 -#define RACE_ROOT_TENTACLE_509 509 -#define RACE_RUNIC_SYMBOL_510 510 -#define RACE_SALTPETTER_BOMB_511 511 -#define RACE_FLOATING_SKULL_512 512 -#define RACE_SPIKE_TRAP_513 513 -#define RACE_TOTEM_514 514 -#define RACE_WEB_515 515 -#define RACE_WICKER_BASKET_516 516 -#define RACE_NIGHTMARE_517 517 -#define RACE_HORSE_518 518 -#define RACE_UNICORN_519 519 -#define RACE_BIXIE_520 520 -#define RACE_CENTAUR_521 521 -#define RACE_DRAKKIN_522 522 -#define RACE_GIANT_523 523 -#define RACE_GNOLL_524 524 -#define RACE_GRIFFIN_525 525 -#define RACE_GIANT_SHADE_526 526 -#define RACE_HARPY_527 527 -#define RACE_MAMMOTH_528 528 -#define RACE_SATYR_529 529 -#define RACE_DRAGON_530 530 -#define RACE_DRAGON_531 531 -#define RACE_DYNLETH_532 532 -#define RACE_BOAT_533 533 -#define RACE_WEAPON_RACK_534 534 -#define RACE_ARMOR_RACK_535 535 -#define RACE_HONEY_POT_536 536 -#define RACE_JUM_JUM_BUCKET_537 537 -#define RACE_PLANT_538 538 -#define RACE_PLANT_539 539 -#define RACE_PLANT_540 540 -#define RACE_TOOLBOX_541 541 -#define RACE_WINE_CASK_542 542 -#define RACE_STONE_JUG_543 543 -#define RACE_ELVEN_BOAT_544 544 -#define RACE_GNOMISH_BOAT_545 545 -#define RACE_BARREL_BARGE_SHIP_546 546 -#define RACE_GOO_547 547 -#define RACE_GOO_548 548 -#define RACE_GOO_549 549 -#define RACE_MERCHANT_SHIP_550 550 -#define RACE_PIRATE_SHIP_551 551 -#define RACE_GHOST_SHIP_552 552 -#define RACE_BANNER_553 553 -#define RACE_BANNER_554 554 -#define RACE_BANNER_555 555 -#define RACE_BANNER_556 556 -#define RACE_BANNER_557 557 -#define RACE_AVIAK_558 558 -#define RACE_BEETLE_559 559 -#define RACE_GORILLA_560 560 -#define RACE_KEDGE_561 561 -#define RACE_KERRAN_562 562 -#define RACE_SHISSAR_563 563 -#define RACE_SIREN_564 564 -#define RACE_SPHINX_565 565 -#define RACE_HUMAN_566 566 -#define RACE_CAMPFIRE_567 567 -#define RACE_BROWNIE_568 568 -#define RACE_DRAGON_569 569 -#define RACE_EXOSKELETON_570 570 -#define RACE_GHOUL_571 571 -#define RACE_CLOCKWORK_GUARDIAN_572 572 -#define RACE_MANTRAP_573 573 -#define RACE_MINOTAUR_574 574 -#define RACE_SCARECROW_575 575 -#define RACE_SHADE_576 576 -#define RACE_ROTOCOPTER_577 577 -#define RACE_TENTACLE_TERROR_578 578 -#define RACE_WEREORC_579 579 -#define RACE_WORG_580 580 -#define RACE_WYVERN_581 581 -#define RACE_CHIMERA_582 582 -#define RACE_KIRIN_583 583 -#define RACE_PUMA_584 584 -#define RACE_BOULDER_585 585 -#define RACE_BANNER_586 586 -#define RACE_ELVEN_GHOST_587 587 -#define RACE_HUMAN_GHOST_588 588 -#define RACE_CHEST_589 589 -#define RACE_CHEST_590 590 -#define RACE_CRYSTAL_591 591 -#define RACE_COFFIN_592 592 -#define RACE_GUARDIAN_CPU_593 593 -#define RACE_WORG_594 594 -#define RACE_MANSION_595 595 -#define RACE_FLOATING_ISLAND_596 596 -#define RACE_CRAGSLITHER_597 597 -#define RACE_WRULON_598 598 -#define RACE_SPELL_PARTICLE_1_599 599 -#define RACE_INVISIBLE_MAN_OF_ZOMM_600 600 -#define RACE_ROBOCOPTER_OF_ZOMM_601 601 -#define RACE_BURYNAI_602 602 -#define RACE_FROG_603 603 -#define RACE_DRACOLICH_604 604 -#define RACE_IKSAR_GHOST_605 605 -#define RACE_IKSAR_SKELETON_606 606 -#define RACE_MEPHIT_607 607 -#define RACE_MUDDITE_608 608 -#define RACE_RAPTOR_609 609 -#define RACE_SARNAK_610 610 -#define RACE_SCORPION_611 611 -#define RACE_TSETSIAN_612 612 -#define RACE_WURM_613 613 -#define RACE_BALROG_614 614 -#define RACE_HYDRA_CRYSTAL_615 615 -#define RACE_CRYSTAL_SPHERE_616 616 -#define RACE_GNOLL_617 617 -#define RACE_SOKOKAR_618 618 -#define RACE_STONE_PYLON_619 619 -#define RACE_DEMON_VULTURE_620 620 -#define RACE_WAGON_621 621 -#define RACE_GOD_OF_DISCORD_622 622 -#define RACE_WRULON_MOUNT_623 623 -#define RACE_OGRE_NPC_MALE_624 624 -#define RACE_SOKOKAR_MOUNT_625 625 -#define RACE_GIANT_626 626 -#define RACE_SOKOKAR_MOUNT_627 627 -#define RACE_10TH_ANNIVERSARY_BANNER_628 628 -#define RACE_10TH_ANNIVERSARY_CAKE_629 629 -#define RACE_WINE_CASK_630 630 -#define RACE_HYDRA_MOUNT_631 631 -#define RACE_HYDRA_NPC_632 632 -#define RACE_WEDDING_FLOWERS_633 633 -#define RACE_WEDDING_ARBOR_634 634 -#define RACE_WEDDING_ALTAR_635 635 -#define RACE_POWDER_KEG_636 636 -#define RACE_APEXUS_637 637 -#define RACE_BELLIKOS_638 638 -#define RACE_BRELLS_FIRST_CREATION_639 639 -#define RACE_BRELL_640 640 -#define RACE_CRYSTALSKIN_AMBULOID_641 641 -#define RACE_CLIKNAR_QUEEN_642 642 -#define RACE_CLIKNAR_SOLDIER_643 643 -#define RACE_CLIKNAR_WORKER_644 644 -#define RACE_COLDAIN_645 645 -#define RACE_COLDAIN_646 646 -#define RACE_CRYSTALSKIN_SESSILOID_647 647 -#define RACE_GENARI_648 648 -#define RACE_GIGYN_649 649 -#define RACE_GREKEN_YOUNG_ADULT_650 650 -#define RACE_GREKEN_YOUNG_651 651 -#define RACE_CLIKNAR_MOUNT_652 652 -#define RACE_TELMIRA_653 653 -#define RACE_SPIDER_MOUNT_654 654 -#define RACE_BEAR_MOUNT_655 655 -#define RACE_RAT_MOUNT_656 656 -#define RACE_SESSILOID_MOUNT_657 657 -#define RACE_MORELL_THULE_658 658 -#define RACE_MARIONETTE_659 659 -#define RACE_BOOK_DERVISH_660 660 -#define RACE_TOPIARY_LION_661 661 -#define RACE_ROTDOG_662 662 -#define RACE_AMYGDALAN_663 663 -#define RACE_SANDMAN_664 664 -#define RACE_GRANDFATHER_CLOCK_665 665 -#define RACE_GINGERBREAD_MAN_666 666 -#define RACE_BEEFEATER_667 667 -#define RACE_RABBIT_668 668 -#define RACE_BLIND_DREAMER_669 669 -#define RACE_CAZIC_THULE_670 670 -#define RACE_TOPIARY_LION_MOUNT_671 671 -#define RACE_ROT_DOG_MOUNT_672 672 -#define RACE_GORAL_MOUNT_673 673 -#define RACE_SELYRAN_MOUNT_674 674 -#define RACE_SCLERA_MOUNT_675 675 -#define RACE_BRAXY_MOUNT_676 676 -#define RACE_KANGON_MOUNT_677 677 -#define RACE_ERUDITE_678 678 -#define RACE_WURM_MOUNT_679 679 -#define RACE_RAPTOR_MOUNT_680 680 -#define RACE_INVISIBLE_MAN_681 681 -#define RACE_WHIRLIGIG_682 682 -#define RACE_GNOMISH_BALLOON_683 683 -#define RACE_GNOMISH_ROCKET_PACK_684 684 -#define RACE_GNOMISH_HOVERING_TRANSPORT_685 685 -#define RACE_SELYRAH_686 686 -#define RACE_GORAL_687 687 -#define RACE_BRAXI_688 688 -#define RACE_KANGON_689 689 -#define RACE_INVISIBLE_MAN_690 690 -#define RACE_FLOATING_TOWER_691 691 -#define RACE_EXPLOSIVE_CART_692 692 -#define RACE_BLIMP_SHIP_693 693 -#define RACE_TUMBLEWEED_694 694 -#define RACE_ALARAN_695 695 -#define RACE_SWINETOR_696 696 -#define RACE_TRIUMVIRATE_697 697 -#define RACE_HADAL_698 698 -#define RACE_HOVERING_PLATFORM_699 699 -#define RACE_PARASITIC_SCAVENGER_700 700 -#define RACE_GRENDLAEN_701 701 -#define RACE_SHIP_IN_A_BOTTLE_702 702 -#define RACE_ALARAN_SENTRY_STONE_703 703 -#define RACE_DERVISH_704 704 -#define RACE_REGENERATION_POOL_705 705 -#define RACE_TELEPORTATION_STAND_706 706 -#define RACE_RELIC_CASE_707 707 -#define RACE_ALARAN_GHOST_708 708 -#define RACE_SKYSTRIDER_709 709 -#define RACE_WATER_SPOUT_710 710 -#define RACE_AVIAK_PULL_ALONG_711 711 -#define RACE_GELATINOUS_CUBE_712 712 -#define RACE_CAT_713 713 -#define RACE_ELK_HEAD_714 714 -#define RACE_HOLGRESH_715 715 -#define RACE_BEETLE_716 716 -#define RACE_VINE_MAW_717 717 -#define RACE_RATMAN_718 718 -#define RACE_FALLEN_KNIGHT_719 719 -#define RACE_FLYING_CARPET_720 720 -#define RACE_CARRIER_HAND_721 721 -#define RACE_FALLEN_KNIGHT_722 722 -#define RACE_SERVANT_OF_SHADOW_723 723 -#define RACE_LUCLIN_724 724 -#define RACE_XARIC_725 725 -#define RACE_DERVISH_726 726 -#define RACE_DERVISH_727 727 -#define RACE_LUCLIN_728 728 -#define RACE_LUCLIN_729 729 -#define RACE_ORB_730 730 -#define RACE_LUCLIN_731 731 -#define RACE_PEGASUS_732 732 -#define RACE_INTERACTIVE_OBJECT_2250 2250 -#define RACE_NODE_2254 2254 +namespace Race { + constexpr uint16 Doug = 0; + 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 Aviak = 13; + constexpr uint16 Werewolf = 14; + constexpr uint16 Brownie = 15; + constexpr uint16 Centaur = 16; + constexpr uint16 Golem = 17; + constexpr uint16 Giant = 18; + constexpr uint16 Trakanon = 19; + constexpr uint16 VenrilSathir = 20; + constexpr uint16 EvilEye = 21; + constexpr uint16 Beetle = 22; + constexpr uint16 Kerran = 23; + constexpr uint16 Fish = 24; + constexpr uint16 Fairy = 25; + constexpr uint16 Froglok = 26; + constexpr uint16 FroglokGhoul = 27; + constexpr uint16 Fungusman = 28; + constexpr uint16 Gargoyle = 29; + constexpr uint16 Gasbag = 30; + constexpr uint16 GelatinousCube = 31; + constexpr uint16 Ghost = 32; + constexpr uint16 Ghoul = 33; + constexpr uint16 GiantBat = 34; + constexpr uint16 GiantEel = 35; + constexpr uint16 GiantRat = 36; + constexpr uint16 GiantSnake = 37; + constexpr uint16 GiantSpider = 38; + constexpr uint16 Gnoll = 39; + constexpr uint16 Goblin = 40; + constexpr uint16 Gorilla = 41; + constexpr uint16 Wolf = 42; + constexpr uint16 Bear = 43; + constexpr uint16 FreeportGuard = 44; + constexpr uint16 DemiLich = 45; + constexpr uint16 Imp = 46; + constexpr uint16 Griffin = 47; + constexpr uint16 Kobold = 48; + constexpr uint16 LavaDragon = 49; + constexpr uint16 Lion = 50; + constexpr uint16 LizardMan = 51; + constexpr uint16 Mimic = 52; + constexpr uint16 Minotaur = 53; + constexpr uint16 Orc = 54; + constexpr uint16 HumanBeggar = 55; + constexpr uint16 Pixie = 56; + constexpr uint16 Drachnid = 57; + constexpr uint16 SolusekRo = 58; + constexpr uint16 Bloodgill = 59; + constexpr uint16 Skeleton = 60; + constexpr uint16 Shark = 61; + constexpr uint16 Tunare = 62; + constexpr uint16 Tiger = 63; + constexpr uint16 Treant = 64; + constexpr uint16 Vampire = 65; + constexpr uint16 StatueOfRallosZek = 66; + constexpr uint16 HighpassCitizen = 67; + constexpr uint16 TentacleTerror = 68; + constexpr uint16 Wisp = 69; + constexpr uint16 Zombie = 70; + constexpr uint16 QeynosCitizen = 71; + constexpr uint16 Ship = 72; + constexpr uint16 Launch = 73; + constexpr uint16 Piranha = 74; + constexpr uint16 Elemental = 75; + constexpr uint16 Puma = 76; + constexpr uint16 NeriakCitizen = 77; + constexpr uint16 EruditeCitizen = 78; + constexpr uint16 Bixie = 79; + constexpr uint16 ReanimatedHand = 80; + constexpr uint16 RivervaleCitizen = 81; + constexpr uint16 Scarecrow = 82; + constexpr uint16 Skunk = 83; + constexpr uint16 SnakeElemental = 84; + constexpr uint16 Spectre = 85; + constexpr uint16 Sphinx = 86; + constexpr uint16 Armadillo = 87; + constexpr uint16 ClockworkGnome = 88; + constexpr uint16 Drake = 89; + constexpr uint16 HalasCitizen = 90; + constexpr uint16 Alligator = 91; + constexpr uint16 GrobbCitizen = 92; + constexpr uint16 OggokCitizen = 93; + constexpr uint16 KaladimCitizen = 94; + constexpr uint16 CazicThule = 95; + constexpr uint16 Cockatrice = 96; + constexpr uint16 DaisyMan = 97; + constexpr uint16 ElfVampire = 98; + constexpr uint16 Denizen = 99; + constexpr uint16 Dervish = 100; + constexpr uint16 Efreeti = 101; + constexpr uint16 FroglokTadpole = 102; + constexpr uint16 PhinigelAutropos = 103; + constexpr uint16 Leech = 104; + constexpr uint16 Swordfish = 105; + constexpr uint16 Felguard = 106; + constexpr uint16 Mammoth = 107; + constexpr uint16 EyeOfZomm = 108; + constexpr uint16 Wasp = 109; + constexpr uint16 Mermaid = 110; + constexpr uint16 Harpy = 111; + constexpr uint16 Fayguard = 112; + constexpr uint16 Drixie = 113; + constexpr uint16 GhostShip = 114; + constexpr uint16 Clam = 115; + constexpr uint16 SeaHorse = 116; + constexpr uint16 DwarfGhost = 117; + constexpr uint16 EruditeGhost = 118; + constexpr uint16 Sabertooth = 119; + constexpr uint16 WolfElemental = 120; + constexpr uint16 Gorgon = 121; + constexpr uint16 DragonSkeleton = 122; + constexpr uint16 Innoruuk = 123; + constexpr uint16 Unicorn = 124; + constexpr uint16 Pegasus = 125; + constexpr uint16 Djinn = 126; + constexpr uint16 InvisibleMan = 127; + constexpr uint16 Iksar = 128; + constexpr uint16 Scorpion = 129; + constexpr uint16 VahShir = 130; + constexpr uint16 Sarnak = 131; + constexpr uint16 Draglock = 132; + constexpr uint16 Drolvarg = 133; + constexpr uint16 Mosquito = 134; + constexpr uint16 Rhinoceros = 135; + constexpr uint16 Xalgoz = 136; + constexpr uint16 KunarkGoblin = 137; + constexpr uint16 Yeti = 138; + constexpr uint16 IksarCitizen = 139; + constexpr uint16 ForestGiant = 140; + constexpr uint16 Boat = 141; + constexpr uint16 MinorIllusion = 142; + constexpr uint16 Tree = 143; + constexpr uint16 Burynai = 144; + constexpr uint16 Goo = 145; + constexpr uint16 SarnakSpirit = 146; + constexpr uint16 IksarSpirit = 147; + constexpr uint16 KunarkFish = 148; + constexpr uint16 IksarScorpion = 149; + constexpr uint16 Erollisi = 150; + constexpr uint16 Tribunal = 151; + constexpr uint16 Bertoxxulous = 152; + constexpr uint16 Bristlebane = 153; + constexpr uint16 FayDrake = 154; + constexpr uint16 UndeadSarnak = 155; + constexpr uint16 Ratman = 156; + constexpr uint16 Wyvern = 157; + constexpr uint16 Wurm = 158; + constexpr uint16 Devourer = 159; + constexpr uint16 IksarGolem = 160; + constexpr uint16 UndeadIksar = 161; + constexpr uint16 ManEatingPlant = 162; + constexpr uint16 Raptor = 163; + constexpr uint16 SarnakGolem = 164; + constexpr uint16 WaterDragon = 165; + constexpr uint16 AnimatedHand = 166; + constexpr uint16 Succulent = 167; + constexpr uint16 Holgresh = 168; + constexpr uint16 Brontotherium = 169; + constexpr uint16 SnowDervish = 170; + constexpr uint16 DireWolf = 171; + constexpr uint16 Manticore = 172; + constexpr uint16 Totem = 173; + constexpr uint16 IceSpectre = 174; + constexpr uint16 EnchantedArmor = 175; + constexpr uint16 SnowRabbit = 176; + constexpr uint16 Walrus = 177; + constexpr uint16 Geonid = 178; + constexpr uint16 Unknown = 179; + constexpr uint16 Unknown2 = 180; + constexpr uint16 Yakkar = 181; + constexpr uint16 Faun = 182; + constexpr uint16 Coldain = 183; + constexpr uint16 VeliousDragon = 184; + constexpr uint16 Hag = 185; + constexpr uint16 Hippogriff = 186; + constexpr uint16 Siren = 187; + constexpr uint16 FrostGiant = 188; + constexpr uint16 StormGiant = 189; + constexpr uint16 Othmir = 190; + constexpr uint16 Ulthork = 191; + constexpr uint16 ClockworkDragon = 192; + constexpr uint16 Abhorrent = 193; + constexpr uint16 SeaTurtle = 194; + constexpr uint16 BlackAndWhiteDragon = 195; + constexpr uint16 GhostDragon = 196; + constexpr uint16 RonnieTest = 197; + constexpr uint16 PrismaticDragon = 198; + constexpr uint16 Shiknar = 199; + constexpr uint16 Rockhopper = 200; + constexpr uint16 Underbulk = 201; + constexpr uint16 Grimling = 202; + constexpr uint16 Worm = 203; + constexpr uint16 EvanTest = 204; + constexpr uint16 KhatiSha = 205; + constexpr uint16 Owlbear = 206; + constexpr uint16 RhinoBeetle = 207; + constexpr uint16 Vampire2 = 208; + constexpr uint16 EarthElemental = 209; + constexpr uint16 AirElemental = 210; + constexpr uint16 WaterElemental = 211; + constexpr uint16 FireElemental = 212; + constexpr uint16 WetfangMinnow = 213; + constexpr uint16 ThoughtHorror = 214; + constexpr uint16 Tegi = 215; + constexpr uint16 Horse = 216; + constexpr uint16 Shissar = 217; + constexpr uint16 FungalFiend = 218; + constexpr uint16 VampireVolatalis = 219; + constexpr uint16 Stonegrabber = 220; + constexpr uint16 ScarletCheetah = 221; + constexpr uint16 Zelniak = 222; + constexpr uint16 Lightcrawler = 223; + constexpr uint16 Shade = 224; + constexpr uint16 Sunflower = 225; + constexpr uint16 Shadel = 226; + constexpr uint16 Shrieker = 227; + constexpr uint16 Galorian = 228; + constexpr uint16 Netherbian = 229; + constexpr uint16 Akhevan = 230; + constexpr uint16 GriegVeneficus = 231; + constexpr uint16 SonicWolf = 232; + constexpr uint16 GroundShaker = 233; + constexpr uint16 VahShirSkeleton = 234; + constexpr uint16 Wretch = 235; + constexpr uint16 LordInquisitorSeru = 236; + constexpr uint16 Recuso = 237; + constexpr uint16 VahShirKing = 238; + constexpr uint16 VahShirGuard = 239; + constexpr uint16 TeleportMan = 240; + constexpr uint16 Werewolf2 = 241; + constexpr uint16 Nymph = 242; + constexpr uint16 Dryad = 243; + constexpr uint16 Treant2 = 244; + constexpr uint16 Fly = 245; + constexpr uint16 TarewMarr = 246; + constexpr uint16 SolusekRo2 = 247; + constexpr uint16 ClockworkGolem = 248; + constexpr uint16 ClockworkBrain = 249; + constexpr uint16 Banshee = 250; + constexpr uint16 GuardOfJustice = 251; + constexpr uint16 MiniPom = 252; + constexpr uint16 DiseasedFiend = 253; + constexpr uint16 SolusekRoGuard = 254; + constexpr uint16 BertoxxulousNew = 255; + constexpr uint16 TribunalNew = 256; + constexpr uint16 TerrisThule = 257; + constexpr uint16 Vegerog = 258; + constexpr uint16 Crocodile = 259; + constexpr uint16 Bat = 260; + constexpr uint16 Hraquis = 261; + constexpr uint16 Tranquilion = 262; + constexpr uint16 TinSoldier = 263; + constexpr uint16 NightmareWraith = 264; + constexpr uint16 Malarian = 265; + constexpr uint16 KnightOfPestilence = 266; + constexpr uint16 Lepertoloth = 267; + constexpr uint16 Bubonian = 268; + constexpr uint16 BubonianUnderling = 269; + constexpr uint16 Pusling = 270; + constexpr uint16 WaterMephit = 271; + constexpr uint16 Stormrider = 272; + constexpr uint16 JunkBeast = 273; + constexpr uint16 BrokenClockwork = 274; + constexpr uint16 GiantClockwork = 275; + constexpr uint16 ClockworkBeetle = 276; + constexpr uint16 NightmareGoblin = 277; + constexpr uint16 Karana = 278; + constexpr uint16 BloodRaven = 279; + constexpr uint16 NightmareGargoyle = 280; + constexpr uint16 MouthOfInsanity = 281; + constexpr uint16 SkeletalHorse = 282; + constexpr uint16 Saryrn = 283; + constexpr uint16 FenninRo = 284; + constexpr uint16 Tormentor = 285; + constexpr uint16 SoulDevourer = 286; + constexpr uint16 Nightmare = 287; + constexpr uint16 NewRallosZek = 288; + constexpr uint16 VallonZek = 289; + constexpr uint16 TallonZek = 290; + constexpr uint16 AirMephit = 291; + constexpr uint16 EarthMephit = 292; + constexpr uint16 FireMephit = 293; + constexpr uint16 NightmareMephit = 294; + constexpr uint16 Zebuxoruk = 295; + constexpr uint16 MithanielMarr = 296; + constexpr uint16 UndeadKnight = 297; + constexpr uint16 Rathe = 298; + constexpr uint16 Xegony = 299; + constexpr uint16 Fiend = 300; + constexpr uint16 TestObject = 301; + constexpr uint16 Crab = 302; + constexpr uint16 Phoenix = 303; + constexpr uint16 Quarm = 304; + constexpr uint16 Bear2 = 305; + constexpr uint16 EarthGolem = 306; + constexpr uint16 IronGolem = 307; + constexpr uint16 StormGolem = 308; + constexpr uint16 AirGolem = 309; + constexpr uint16 WoodGolem = 310; + constexpr uint16 FireGolem = 311; + constexpr uint16 WaterGolem = 312; + constexpr uint16 WarWraith = 313; + constexpr uint16 Wrulon = 314; + constexpr uint16 Kraken = 315; + constexpr uint16 PoisonFrog = 316; + constexpr uint16 Nilborien = 317; + constexpr uint16 Valorian = 318; + constexpr uint16 WarBoar = 319; + constexpr uint16 Efreeti2 = 320; + constexpr uint16 WarBoar2 = 321; + constexpr uint16 Valorian2 = 322; + constexpr uint16 AnimatedArmor = 323; + constexpr uint16 UndeadFootman = 324; + constexpr uint16 RallosOgre = 325; + constexpr uint16 Arachnid = 326; + constexpr uint16 CrystalSpider = 327; + constexpr uint16 ZebuxoruksCage = 328; + constexpr uint16 Portal = 329; + constexpr uint16 Froglok2 = 330; + constexpr uint16 TrollCrewMember = 331; + constexpr uint16 PirateDeckhand = 332; + constexpr uint16 BrokenSkullPirate = 333; + constexpr uint16 PirateGhost = 334; + constexpr uint16 OneArmedPirate = 335; + constexpr uint16 SpiritmasterNadox = 336; + constexpr uint16 BrokenSkullTaskmaster = 337; + constexpr uint16 GnomePirate = 338; + constexpr uint16 DarkElfPirate = 339; + constexpr uint16 OgrePirate = 340; + constexpr uint16 HumanPirate = 341; + constexpr uint16 EruditePirate = 342; + constexpr uint16 Frog = 343; + constexpr uint16 TrollZombie = 344; + constexpr uint16 Luggald = 345; + constexpr uint16 Luggald2 = 346; + constexpr uint16 Luggald3 = 347; + constexpr uint16 Drogmor = 348; + constexpr uint16 FroglokSkeleton = 349; + constexpr uint16 UndeadFroglok = 350; + constexpr uint16 KnightOfHate = 351; + constexpr uint16 ArcanistOfHate = 352; + constexpr uint16 Veksar = 353; + constexpr uint16 Veksar2 = 354; + constexpr uint16 Veksar3 = 355; + constexpr uint16 Chokidai = 356; + constexpr uint16 UndeadChokidai = 357; + constexpr uint16 UndeadVeksar = 358; + constexpr uint16 UndeadVampire = 359; + constexpr uint16 Vampire3 = 360; + constexpr uint16 RujarkianOrc = 361; + constexpr uint16 BoneGolem = 362; + constexpr uint16 Synarcana = 363; + constexpr uint16 SandElf = 364; + constexpr uint16 MasterVampire = 365; + constexpr uint16 MasterOrc = 366; + constexpr uint16 Skeleton2 = 367; + constexpr uint16 Mummy = 368; + constexpr uint16 NewGoblin = 369; + constexpr uint16 Insect = 370; + constexpr uint16 FroglokGhost = 371; + constexpr uint16 Dervish2 = 372; + constexpr uint16 Shade2 = 373; + constexpr uint16 Golem2 = 374; + constexpr uint16 EvilEye2 = 375; + constexpr uint16 Box = 376; + constexpr uint16 Barrel = 377; + constexpr uint16 Chest = 378; + constexpr uint16 Vase = 379; + constexpr uint16 Table = 380; + constexpr uint16 WeaponRack = 381; + constexpr uint16 Coffin = 382; + constexpr uint16 Bones = 383; + constexpr uint16 Jokester = 384; + constexpr uint16 Nihil = 385; + constexpr uint16 Trusik = 386; + constexpr uint16 StoneWorker = 387; + constexpr uint16 Hynid = 388; + constexpr uint16 Turepta = 389; + constexpr uint16 Cragbeast = 390; + constexpr uint16 Stonemite = 391; + constexpr uint16 Ukun = 392; + constexpr uint16 Ixt = 393; + constexpr uint16 Ikaav = 394; + constexpr uint16 Aneuk = 395; + constexpr uint16 Kyv = 396; + constexpr uint16 Noc = 397; + constexpr uint16 Ratuk = 398; + constexpr uint16 Taneth = 399; + constexpr uint16 Huvul = 400; + constexpr uint16 Mutna = 401; + constexpr uint16 Mastruq = 402; + constexpr uint16 Taelosian = 403; + constexpr uint16 DiscordShip = 404; + constexpr uint16 StoneWorker2 = 405; + constexpr uint16 MataMuram = 406; + constexpr uint16 LightingWarrior = 407; + constexpr uint16 Succubus = 408; + constexpr uint16 Bazu = 409; + constexpr uint16 Feran = 410; + constexpr uint16 Pyrilen = 411; + constexpr uint16 Chimera = 412; + constexpr uint16 Dragorn = 413; + constexpr uint16 Murkglider = 414; + constexpr uint16 Rat = 415; + constexpr uint16 Bat2 = 416; + constexpr uint16 Gelidran = 417; + constexpr uint16 Discordling = 418; + constexpr uint16 Girplan = 419; + constexpr uint16 Minotaur2 = 420; + constexpr uint16 DragornBox = 421; + constexpr uint16 RunedOrb = 422; + constexpr uint16 DragonBones = 423; + constexpr uint16 MuramiteArmorPile = 424; + constexpr uint16 CrystalShard = 425; + constexpr uint16 Portal2 = 426; + constexpr uint16 CoinPurse = 427; + constexpr uint16 RockPile = 428; + constexpr uint16 MurkgliderEggSack = 429; + constexpr uint16 Drake2 = 430; + constexpr uint16 Dervish3 = 431; + constexpr uint16 Drake3 = 432; + constexpr uint16 Goblin2 = 433; + constexpr uint16 Kirin = 434; + constexpr uint16 Dragon = 435; + constexpr uint16 Basilisk = 436; + constexpr uint16 Dragon2 = 437; + constexpr uint16 Dragon3 = 438; + constexpr uint16 Puma2 = 439; + constexpr uint16 Spider = 440; + constexpr uint16 SpiderQueen = 441; + constexpr uint16 AnimatedStatue = 442; + constexpr uint16 Unknown3 = 443; + constexpr uint16 Unknown4 = 444; + constexpr uint16 DragonEgg = 445; + constexpr uint16 DragonStatue = 446; + constexpr uint16 LavaRock = 447; + constexpr uint16 AnimatedStatue2 = 448; + constexpr uint16 SpiderEggSack = 449; + constexpr uint16 LavaSpider = 450; + constexpr uint16 LavaSpiderQueen = 451; + constexpr uint16 Dragon4 = 452; + constexpr uint16 Giant2 = 453; + constexpr uint16 Werewolf3 = 454; + constexpr uint16 Kobold2 = 455; + constexpr uint16 Sporali = 456; + constexpr uint16 Gnomework = 457; + constexpr uint16 Orc2 = 458; + constexpr uint16 Corathus = 459; + constexpr uint16 Coral = 460; + constexpr uint16 Drachnid2 = 461; + constexpr uint16 DrachnidCocoon = 462; + constexpr uint16 FungusPatch = 463; + constexpr uint16 Gargoyle2 = 464; + constexpr uint16 Witheran = 465; + constexpr uint16 DarkLord = 466; + constexpr uint16 Shiliskin = 467; + constexpr uint16 Snake = 468; + constexpr uint16 EvilEye3 = 469; + constexpr uint16 Minotaur3 = 470; + constexpr uint16 Zombie2 = 471; + constexpr uint16 ClockworkBoar = 472; + constexpr uint16 Fairy2 = 473; + constexpr uint16 Witheran2 = 474; + constexpr uint16 AirElemental2 = 475; + constexpr uint16 EarthElemental2 = 476; + constexpr uint16 FireElemental2 = 477; + constexpr uint16 WaterElemental2 = 478; + constexpr uint16 Alligator2 = 479; + constexpr uint16 Bear3 = 480; + constexpr uint16 ScaledWolf = 481; + constexpr uint16 Wolf2 = 482; + constexpr uint16 SpiritWolf = 483; + constexpr uint16 Skeleton3 = 484; + constexpr uint16 Spectre2 = 485; + constexpr uint16 Bolvirk = 486; + constexpr uint16 Banshee2 = 487; + constexpr uint16 Banshee3 = 488; + constexpr uint16 Elddar = 489; + constexpr uint16 ForestGiant2 = 490; + constexpr uint16 BoneGolem2 = 491; + constexpr uint16 Horse2 = 492; + constexpr uint16 Pegasus2 = 493; + constexpr uint16 ShamblingMound = 494; + constexpr uint16 Scrykin = 495; + constexpr uint16 Treant3 = 496; + constexpr uint16 Vampire4 = 497; + constexpr uint16 AyonaeRo = 498; + constexpr uint16 SullonZek = 499; + constexpr uint16 Banner = 500; + constexpr uint16 Flag = 501; + constexpr uint16 Rowboat = 502; + constexpr uint16 BearTrap = 503; + constexpr uint16 ClockworkBomb = 504; + constexpr uint16 DynamiteKeg = 505; + constexpr uint16 PressurePlate = 506; + constexpr uint16 PufferSpore = 507; + constexpr uint16 StoneRing = 508; + constexpr uint16 RootTentacle = 509; + constexpr uint16 RunicSymbol = 510; + constexpr uint16 SaltpetterBomb = 511; + constexpr uint16 FloatingSkull = 512; + constexpr uint16 SpikeTrap = 513; + constexpr uint16 Totem2 = 514; + constexpr uint16 Web = 515; + constexpr uint16 WickerBasket = 516; + constexpr uint16 Unicorn2 = 517; + constexpr uint16 Horse3 = 518; + constexpr uint16 Unicorn3 = 519; + constexpr uint16 Bixie2 = 520; + constexpr uint16 Centaur2 = 521; + constexpr uint16 Drakkin = 522; + constexpr uint16 Giant3 = 523; + constexpr uint16 Gnoll2 = 524; + constexpr uint16 Griffin2 = 525; + constexpr uint16 GiantShade = 526; + constexpr uint16 Harpy2 = 527; + constexpr uint16 Mammoth2 = 528; + constexpr uint16 Satyr = 529; + constexpr uint16 Dragon5 = 530; + constexpr uint16 Dragon6 = 531; + constexpr uint16 Dynleth = 532; + constexpr uint16 Boat2 = 533; + constexpr uint16 WeaponRack2 = 534; + constexpr uint16 ArmorRack = 535; + constexpr uint16 HoneyPot = 536; + constexpr uint16 JumJumBucket = 537; + constexpr uint16 Plant = 538; + constexpr uint16 StoneJug = 539; + constexpr uint16 Plant2 = 540; + constexpr uint16 Toolbox = 541; + constexpr uint16 WineCask = 542; + constexpr uint16 StoneJug2 = 543; + constexpr uint16 ElvenBoat = 544; + constexpr uint16 GnomishBoat = 545; + constexpr uint16 UndeadBoat = 546; + constexpr uint16 Goo2 = 547; + constexpr uint16 Goo3 = 548; + constexpr uint16 Goo4 = 549; + constexpr uint16 MerchantShip = 550; + constexpr uint16 PirateShip = 551; + constexpr uint16 GhostShip2 = 552; + constexpr uint16 Banner2 = 553; + constexpr uint16 Banner3 = 554; + constexpr uint16 Banner4 = 555; + constexpr uint16 Banner5 = 556; + constexpr uint16 Banner6 = 557; + constexpr uint16 Aviak2 = 558; + constexpr uint16 Beetle2 = 559; + constexpr uint16 Gorilla2 = 560; + constexpr uint16 Kedge = 561; + constexpr uint16 Kerran2 = 562; + constexpr uint16 Shissar2 = 563; + constexpr uint16 Siren2 = 564; + constexpr uint16 Sphinx2 = 565; + constexpr uint16 Human2 = 566; + constexpr uint16 Campfire = 567; + constexpr uint16 Brownie2 = 568; + constexpr uint16 Dragon7 = 569; + constexpr uint16 Exoskeleton = 570; + constexpr uint16 Ghoul2 = 571; + constexpr uint16 ClockworkGuardian = 572; + constexpr uint16 Unknown5 = 573; + constexpr uint16 Minotaur4 = 574; + constexpr uint16 Scarecrow2 = 575; + constexpr uint16 Shade3 = 576; + constexpr uint16 Rotocopter = 577; + constexpr uint16 TentacleTerror2 = 578; + constexpr uint16 Wereorc = 579; + constexpr uint16 Worg = 580; + constexpr uint16 Wyvern2 = 581; + constexpr uint16 Chimera2 = 582; + constexpr uint16 Kirin2 = 583; + constexpr uint16 Puma3 = 584; + constexpr uint16 Boulder = 585; + constexpr uint16 Banner7 = 586; + constexpr uint16 ElvenGhost = 587; + constexpr uint16 HumanGhost = 588; + constexpr uint16 Chest2 = 589; + constexpr uint16 Chest3 = 590; + constexpr uint16 Crystal = 591; + constexpr uint16 Coffin2 = 592; + constexpr uint16 GuardianCpu = 593; + constexpr uint16 Worg2 = 594; + constexpr uint16 Mansion = 595; + constexpr uint16 FloatingIsland = 596; + constexpr uint16 Cragslither = 597; + constexpr uint16 Wrulon2 = 598; + constexpr uint16 SpellParticle = 599; + constexpr uint16 InvisibleManOfZomm = 600; + constexpr uint16 RobocopterOfZomm = 601; + constexpr uint16 Burynai2 = 602; + constexpr uint16 Frog2 = 603; + constexpr uint16 Dracolich = 604; + constexpr uint16 IksarGhost = 605; + constexpr uint16 IksarSkeleton = 606; + constexpr uint16 Mephit = 607; + constexpr uint16 Muddite = 608; + constexpr uint16 Raptor2 = 609; + constexpr uint16 Sarnak2 = 610; + constexpr uint16 Scorpion2 = 611; + constexpr uint16 Tsetsian = 612; + constexpr uint16 Wurm2 = 613; + constexpr uint16 Nekhon = 614; + constexpr uint16 HydraCrystal = 615; + constexpr uint16 CrystalSphere = 616; + constexpr uint16 Gnoll3 = 617; + constexpr uint16 Sokokar = 618; + constexpr uint16 StonePylon = 619; + constexpr uint16 DemonVulture = 620; + constexpr uint16 Wagon = 621; + constexpr uint16 GodOfDiscord = 622; + constexpr uint16 FeranMount = 623; + constexpr uint16 Ogre2 = 624; + constexpr uint16 SokokarMount = 625; + constexpr uint16 Giant4 = 626; + constexpr uint16 SokokarMount2 = 627; + constexpr uint16 TenthAnniversaryBanner = 628; + constexpr uint16 TenthAnniversaryCake = 629; + constexpr uint16 WineCask2 = 630; + constexpr uint16 HydraMount = 631; + constexpr uint16 Hydra = 632; + constexpr uint16 WeddingFlowers = 633; + constexpr uint16 WeddingArbor = 634; + constexpr uint16 WeddingAltar = 635; + constexpr uint16 PowderKeg = 636; + constexpr uint16 Apexus = 637; + constexpr uint16 Bellikos = 638; + constexpr uint16 BrellsFirstCreation = 639; + constexpr uint16 Brell = 640; + constexpr uint16 CrystalskinAmbuloid = 641; + constexpr uint16 CliknarQueen = 642; + constexpr uint16 CliknarSoldier = 643; + constexpr uint16 CliknarWorker = 644; + constexpr uint16 Coldain2 = 645; + constexpr uint16 Coldain3 = 646; + constexpr uint16 CrystalskinSessiloid = 647; + constexpr uint16 Genari = 648; + constexpr uint16 Gigyn = 649; + constexpr uint16 GrekenYoungAdult = 650; + constexpr uint16 GrekenYoung = 651; + constexpr uint16 CliknarMount = 652; + constexpr uint16 Telmira = 653; + constexpr uint16 SpiderMount = 654; + constexpr uint16 BearMount = 655; + constexpr uint16 RatMount = 656; + constexpr uint16 SessiloidMount = 657; + constexpr uint16 MorellThule = 658; + constexpr uint16 Marionette = 659; + constexpr uint16 BookDervish = 660; + constexpr uint16 TopiaryLion = 661; + constexpr uint16 RotDog = 662; + constexpr uint16 Amygdalan = 663; + constexpr uint16 Sandman = 664; + constexpr uint16 GrandfatherClock = 665; + constexpr uint16 GingerbreadMan = 666; + constexpr uint16 RoyalGuard = 667; + constexpr uint16 Rabbit = 668; + constexpr uint16 BlindDreamer = 669; + constexpr uint16 CazicThule2 = 670; + constexpr uint16 TopiaryLionMount = 671; + constexpr uint16 RotDogMount = 672; + constexpr uint16 GoralMount = 673; + constexpr uint16 SelyrahMount = 674; + constexpr uint16 ScleraMount = 675; + constexpr uint16 BraxiMount = 676; + constexpr uint16 KangonMount = 677; + constexpr uint16 Erudite2 = 678; + constexpr uint16 WurmMount = 679; + constexpr uint16 RaptorMount = 680; + constexpr uint16 InvisibleMan2 = 681; + constexpr uint16 Whirligig = 682; + constexpr uint16 GnomishBalloon = 683; + constexpr uint16 GnomishRocketPack = 684; + constexpr uint16 GnomishHoveringTransport = 685; + constexpr uint16 Selyrah = 686; + constexpr uint16 Goral = 687; + constexpr uint16 Braxi = 688; + constexpr uint16 Kangon = 689; + constexpr uint16 InvisibleMan3 = 690; + constexpr uint16 FloatingTower = 691; + constexpr uint16 ExplosiveCart = 692; + constexpr uint16 BlimpShip = 693; + constexpr uint16 Tumbleweed = 694; + constexpr uint16 Alaran = 695; + constexpr uint16 Swinetor = 696; + constexpr uint16 Triumvirate = 697; + constexpr uint16 Hadal = 698; + constexpr uint16 HoveringPlatform = 699; + constexpr uint16 ParasiticScavenger = 700; + constexpr uint16 Grendlaen = 701; + constexpr uint16 ShipInABottle = 702; + constexpr uint16 AlaranSentryStone = 703; + constexpr uint16 Dervish4 = 704; + constexpr uint16 RegenerationPool = 705; + constexpr uint16 TeleportationStand = 706; + constexpr uint16 RelicCase = 707; + constexpr uint16 AlaranGhost = 708; + constexpr uint16 Skystrider = 709; + constexpr uint16 WaterSpout = 710; + constexpr uint16 AviakPullAlong = 711; + constexpr uint16 GelatinousCube2 = 712; + constexpr uint16 Cat = 713; + constexpr uint16 ElkHead = 714; + constexpr uint16 Holgresh2 = 715; + constexpr uint16 Beetle3 = 716; + constexpr uint16 VineMaw = 717; + constexpr uint16 Ratman2 = 718; + constexpr uint16 FallenKnight = 719; + constexpr uint16 FlyingCarpet = 720; + constexpr uint16 CarrierHand = 721; + constexpr uint16 Akheva = 722; + constexpr uint16 ServantOfShadow = 723; + constexpr uint16 Luclin = 724; + constexpr uint16 Xaric = 725; + constexpr uint16 Dervish5 = 726; + constexpr uint16 Dervish6 = 727; + constexpr uint16 Luclin2 = 728; + constexpr uint16 Luclin3 = 729; + constexpr uint16 Orb = 730; + constexpr uint16 Luclin4 = 731; + constexpr uint16 Pegasus3 = 732; + constexpr uint16 InteractiveObject = 2250; + constexpr uint16 Node = 2254; + + constexpr uint16 ALL_RACES_BITMASK = 65535; +} #endif diff --git a/utils/raceconstantrename/go.mod b/utils/raceconstantrename/go.mod new file mode 100644 index 000000000..00e8f9281 --- /dev/null +++ b/utils/raceconstantrename/go.mod @@ -0,0 +1,8 @@ +module constantconvert + +go 1.18 + +require ( + github.com/gammazero/deque v0.2.0 // indirect + github.com/gammazero/workerpool v1.1.3 // indirect +) diff --git a/utils/raceconstantrename/go.sum b/utils/raceconstantrename/go.sum new file mode 100644 index 000000000..b975e2a52 --- /dev/null +++ b/utils/raceconstantrename/go.sum @@ -0,0 +1,4 @@ +github.com/gammazero/deque v0.2.0 h1:SkieyNB4bg2/uZZLxvya0Pq6diUlwx7m2TeT7GAIWaA= +github.com/gammazero/deque v0.2.0/go.mod h1:LFroj8x4cMYCukHJDbxFCkT+r9AndaJnFMuZDV34tuU= +github.com/gammazero/workerpool v1.1.3 h1:WixN4xzukFoN0XSeXF6puqEqFTl2mECI9S6W44HWy9Q= +github.com/gammazero/workerpool v1.1.3/go.mod h1:wPjyBLDbyKnUn2XwwyD3EEwo9dHutia9/fwNmSHWACc= diff --git a/utils/raceconstantrename/main.go b/utils/raceconstantrename/main.go new file mode 100644 index 000000000..4c9ab75cc --- /dev/null +++ b/utils/raceconstantrename/main.go @@ -0,0 +1,313 @@ +package main + +import ( + "fmt" + "github.com/gammazero/workerpool" + "io/fs" + "log" + "os" + "os/exec" + "path/filepath" + "runtime" + "strconv" + "strings" +) + +func main() { + loadDefinitions() + + // get processor count + wp := workerpool.New(runtime.NumCPU()) + + // loop through all files in current dir that are cpp files or h files + err := filepath.WalkDir("../../", func(path string, d fs.DirEntry, err error) error { + if d.IsDir() { + return nil + } + + if !strings.Contains(path, ".cpp") && !strings.Contains(path, ".h") { + return nil + } + + // if file ends with ".o" skip it + if strings.HasSuffix(path, ".o") { + return nil + } + + var ignoreFiles = []string{ + "submodules", "/libs", "utils/", "races.h", "backward", "database_update_manifest.cpp", "zonedb.h", + } + + ignore := false + for _, ignoreString := range ignoreFiles { + if strings.Contains(path, ignoreString) { + ignore = true + break + } + } + if ignore { + return nil + } + + wp.Submit(func() { + + // open file for reading + // get file contents + contents, err := os.ReadFile(path) + if err != nil { + log.Fatalf("impossible to read file: %s", err) + } + + content := string(contents) + + wroteChanges := false + + var newLines []string + for _, line := range strings.Split(content, "\n") { + newLine := line + + // loop through oldDefs and see if any of them are in contents + for key, value := range oldDefs { + // combine all of the above contains into a slice + // loop through slice and if any of them are in line, continue + var ignoreMatches = []string{ + "#define ", "MALE", "FEMALE", "_BIT", "LANG_", + } + + ignore := false + for _, ignoreString := range ignoreMatches { + if strings.Contains(newLine, ignoreString) && !strings.Contains(newLine, "NPC_") { + ignore = true + break + } + } + if ignore { + continue + } + + // below we hackishly use a series of specific string contains to avoid + // making blind and wrong replacements + // but hey - at least its 100% accurate :) + if strings.Contains(line, "case "+key+":") { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, " "+key+":", " "+key2+":") + wroteChanges = true + break + } + } + } + if strings.Contains(line, "\t"+key) { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, "\t"+key, "\t"+key2) + wroteChanges = true + break + } + } + } + if strings.Contains(line, key+",") { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, key+",", key2+",") + wroteChanges = true + break + } + } + } + if strings.Contains(line, ", "+key) { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, ", "+key, ", "+key2) + wroteChanges = true + break + } + } + } + if strings.Contains(line, "= "+key+" ") { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, "= "+key+" ", "= "+key2+" ") + wroteChanges = true + break + } + } + } + if strings.Contains(line, "= "+key+")") { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, "= "+key+")", "= "+key2+")") + wroteChanges = true + break + } + } + } + if strings.Contains(line, "= "+key+";") { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, "= "+key+";", "= "+key2+";") + wroteChanges = true + break + } + } + } + if strings.Contains(line, "= "+key+" ||") { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, "= "+key+" ||", "= "+key2+" ||") + wroteChanges = true + break + } + } + } + + // match cases where our match is on the last line and last column + // we need to be exact in the last column and not do a partial because we can + // accidentally rename say OGRE to OGRE2 mistakenly + if strings.Contains(line, key) { + columns := strings.Split(line, " ") + // get the last column + lastColumn := strings.TrimSpace(columns[len(columns)-1]) + if lastColumn == key { + for key2, value2 := range newDefs { + if value == value2 { + newLine = strings.ReplaceAll(newLine, lastColumn, key2) + wroteChanges = true + break + } + } + } + } + + //if strings.Contains(line, "race == "+key) { + // for key2, value2 := range newDefs { + // if value == value2 { + // newLine = strings.ReplaceAll(newLine, "race == "+key, "race == "+key2) + // wroteChanges = true + // break + // } + // } + //} + } + + newLines = append(newLines, newLine) + } + + // write contents back to file + if wroteChanges { + fmt.Printf("wrote changes to file [%v]\n", path) + err = os.WriteFile(path, []byte(strings.Join(newLines, "\n")), 0644) + if err != nil { + log.Fatalf("impossible to write file: %s", err) + } + } + + return + }) + return nil + }) + if err != nil { + log.Fatalf("impossible to walk directories: %s", err) + } + + wp.StopWait() +} + +var newDefs = make(map[string]int) +var oldDefs = make(map[string]int) + +func loadDefinitions() { + // git show master:common/races.h + cmd := exec.Command("git", "show", "master:common/races.h") + out, err := cmd.Output() + if err != nil { + println(err.Error()) + return + } + + // load into a string -> int map + for _, line := range strings.Split(string(out), "\n") { + if strings.Contains(line, "#define ") { + if len(strings.Split(line, " ")) <= 2 { + continue + } + + // ignore + // #define MALE 0 + // #define FEMALE 1 + // #define NEUTER 2 + if strings.Contains(line, "#define MALE") { + continue + } + if strings.Contains(line, "#define FEMALE") { + continue + } + if strings.Contains(line, "#define NEUTER") { + continue + } + + // load "#define RACE_FLYING_CARPET_720 720" into map + + key := strings.Split(line, " ")[1] + value := strings.Split(line, " ")[2] + value = strings.ReplaceAll(value, "//", "") + value = strings.TrimSpace(value) + //fmt.Printf("key [%v] value [%v]\n", key, value) + + if !strings.HasPrefix(key, "RACE_") && !strings.HasPrefix(key, "RT_") { + continue + } + + // convert value to int + intValue, err := strconv.Atoi(value) + if err != nil { + println(err.Error()) + return + } + + oldDefs[key] = intValue + + fmt.Printf("oldDefs key [%v] value [%v]\n", key, intValue) + } + } + + // cleanup/races_cpp_h + cmd = exec.Command("git", "show", "cleanup/races_cpp_h:common/races.h") + out, err = cmd.Output() + if err != nil { + println(err.Error()) + return + } + + // load into a string -> int map + for _, line := range strings.Split(string(out), "\n") { + if strings.Contains(line, "constexpr uint16") { + if len(strings.Split(line, " ")) <= 2 { + continue + } + + // remove all extra spaces in between characters in line + line = strings.Join(strings.Fields(line), " ") + + // load " constexpr uint16 Doug = 0;" into map + key := strings.Split(line, " ")[2] + value := strings.Split(line, " ")[4] + value = strings.ReplaceAll(value, "//", "") + value = strings.ReplaceAll(value, ";", "") + value = strings.TrimSpace(value) + + // convert value to int + intValue, err := strconv.Atoi(value) + if err != nil { + println(err.Error()) + return + } + + mapKey := "Race::" + key + + newDefs[mapKey] = intValue + + fmt.Printf("newDefs key [%v] value [%v]\n", mapKey, value) + } + } +} diff --git a/zone/aggro.cpp b/zone/aggro.cpp index 0fde4e8c7..ada93ac97 100644 --- a/zone/aggro.cpp +++ b/zone/aggro.cpp @@ -983,14 +983,14 @@ bool Mob::CombatRange(Mob* other, float fixed_size_mod, bool aeRampage, ExtraAtt float size_mod = GetSize(); float other_size_mod = other->GetSize(); - if (GetRace() == RACE_LAVA_DRAGON_49 || GetRace() == RACE_WURM_158 || GetRace() == RACE_GHOST_DRAGON_196) { //For races with a fixed size + if (GetRace() == Race::LavaDragon || GetRace() == Race::Wurm || GetRace() == Race::GhostDragon) { //For races with a fixed size size_mod = 60.0f; } else if (size_mod < 6.0) { size_mod = 8.0f; } - if (other->GetRace() == RACE_LAVA_DRAGON_49 || other->GetRace() == RACE_WURM_158 || other->GetRace() == RACE_GHOST_DRAGON_196) { //For races with a fixed size + if (other->GetRace() == Race::LavaDragon || other->GetRace() == Race::Wurm || other->GetRace() == Race::GhostDragon) { //For races with a fixed size other_size_mod = 60.0f; } else if (other_size_mod < 6.0) { @@ -1011,11 +1011,11 @@ bool Mob::CombatRange(Mob* other, float fixed_size_mod, bool aeRampage, ExtraAtt size_mod *= size_mod * 4; } - if (other->GetRace() == RACE_VELIOUS_DRAGON_184) // Lord Vyemm and other velious dragons + if (other->GetRace() == Race::VeliousDragon) // Lord Vyemm and other velious dragons { size_mod *= 1.75; } - if (other->GetRace() == RACE_DRAGON_SKELETON_122) // Dracoliche in Fear. Skeletal Dragon + if (other->GetRace() == Race::DragonSkeleton) // Dracoliche in Fear. Skeletal Dragon { size_mod *= 2.25; } diff --git a/zone/attack.cpp b/zone/attack.cpp index 58926883f..eacea41db 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4087,7 +4087,7 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons IsPlayerRace(GetBaseRace()) && RuleI(Combat, FrontalStunImmunityRaces) & GetPlayerRaceBit(GetBaseRace()) ) || - GetBaseRace() == RACE_OGGOK_CITIZEN_93 + GetBaseRace() == Race::OggokCitizen ) { is_immune_to_frontal_stun = true; } @@ -4107,7 +4107,7 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons IsPlayerRace(GetBaseRace()) && RuleI(Combat, FrontalStunImmunityRaces) & GetPlayerRaceBit(GetBaseRace()) ) || - GetBaseRace() == RACE_OGGOK_CITIZEN_93 + GetBaseRace() == Race::OggokCitizen ) ) { is_immune_to_frontal_stun = true; diff --git a/zone/bot.cpp b/zone/bot.cpp index 139431a24..fde349c1c 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -2681,7 +2681,7 @@ void Bot::CalcMeleeDistances(const Mob* tar, const EQ::ItemInstance* const& p_it float other_size_mod = tar->GetSize(); // For races with a fixed size - if (GetRace() == RT_DRAGON || GetRace() == RT_WURM || GetRace() == RT_DRAGON_7) { + if (GetRace() == Race::LavaDragon || GetRace() == Race::Wurm || GetRace() == Race::GhostDragon) { // size_mod = 60.0f; } @@ -2690,7 +2690,7 @@ void Bot::CalcMeleeDistances(const Mob* tar, const EQ::ItemInstance* const& p_it } // For races with a fixed size - if (tar->GetRace() == RT_DRAGON || tar->GetRace() == RT_WURM || tar->GetRace() == RT_DRAGON_7) { + if (tar->GetRace() == Race::LavaDragon || tar->GetRace() == Race::Wurm || tar->GetRace() == Race::GhostDragon) { other_size_mod = 60.0f; } diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index 04422233f..057bc7afc 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -5913,11 +5913,11 @@ void bot_command_view_combos(Client *c, const Seperator *sep) }; const uint16 race_values[17] = { - RACE_DOUG_0, - RACE_HUMAN_1, RACE_BARBARIAN_2, RACE_ERUDITE_3, RACE_WOOD_ELF_4, - RACE_HIGH_ELF_5, RACE_DARK_ELF_6, RACE_HALF_ELF_7, RACE_DWARF_8, - RACE_TROLL_9, RACE_OGRE_10, RACE_HALFLING_11, RACE_GNOME_12, - RACE_IKSAR_128, RACE_VAH_SHIR_130, RACE_FROGLOK_330, RACE_DRAKKIN_522 + Race::Doug, + Race::Human, Race::Barbarian, Race::Erudite, Race::WoodElf, + Race::HighElf, Race::DarkElf, Race::HalfElf, Race::Dwarf, + Race::Troll, Race::Ogre, Race::Halfling, Race::Gnome, + Race::Iksar, Race::VahShir, Race::Froglok2, Race::Drakkin }; if (helper_command_alias_fail(c, "bot_command_view_combos", sep->arg[0], "viewcombos")) { @@ -6028,11 +6028,11 @@ void bot_subcommand_bot_create(Client *c, const Seperator *sep) }; const uint16 race_values[17] = { - RACE_DOUG_0, - RACE_HUMAN_1, RACE_BARBARIAN_2, RACE_ERUDITE_3, RACE_WOOD_ELF_4, - RACE_HIGH_ELF_5, RACE_DARK_ELF_6, RACE_HALF_ELF_7, RACE_DWARF_8, - RACE_TROLL_9, RACE_OGRE_10, RACE_HALFLING_11, RACE_GNOME_12, - RACE_IKSAR_128, RACE_VAH_SHIR_130, RACE_FROGLOK_330, RACE_DRAKKIN_522 + Race::Doug, + Race::Human, Race::Barbarian, Race::Erudite, Race::WoodElf, + Race::HighElf, Race::DarkElf, Race::HalfElf, Race::Dwarf, + Race::Troll, Race::Ogre, Race::Halfling, Race::Gnome, + Race::Iksar, Race::VahShir, Race::Froglok2, Race::Drakkin }; const std::string gender_substrs[2] = { diff --git a/zone/client.cpp b/zone/client.cpp index 2e97f8c0d..353319628 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -8632,8 +8632,8 @@ void Client::InitInnates() m_pp.InnateSkills[InnateInspect] = InnateEnabled; m_pp.InnateSkills[InnateOpen] = InnateEnabled; - if (race >= RT_FROGLOK_3) { - if (race == RT_SKELETON_2 || race == RT_FROGLOK_3) { + if (race >= Race::Froglok2) { + if (race == Race::Skeleton2 || race == Race::Froglok2) { m_pp.InnateSkills[InnateUltraVision] = InnateEnabled; } else { m_pp.InnateSkills[InnateInfravision] = InnateEnabled; @@ -8641,75 +8641,75 @@ void Client::InitInnates() } switch (race) { - case RT_BARBARIAN: - case RT_BARBARIAN_2: + case Race::Barbarian: + case Race::HalasCitizen: m_pp.InnateSkills[InnateSlam] = InnateEnabled; break; - case RT_ERUDITE: - case RT_ERUDITE_2: + case Race::Erudite: + case Race::EruditeCitizen: m_pp.InnateSkills[InnateLore] = InnateEnabled; break; - case RT_WOOD_ELF: - case RT_GUARD_3: + case Race::WoodElf: + case Race::Fayguard: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; break; - case RT_GNOME: - case RT_HIGH_ELF: - case RT_GUARD_2: + case Race::Gnome: + case Race::HighElf: + case Race::Felguard: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; m_pp.InnateSkills[InnateLore] = InnateEnabled; break; - case RT_TROLL: - case RT_TROLL_2: + case Race::Troll: + case Race::GrobbCitizen: m_pp.InnateSkills[InnateRegen] = InnateEnabled; m_pp.InnateSkills[InnateSlam] = InnateEnabled; m_pp.InnateSkills[InnateInfravision] = InnateEnabled; break; - case RT_DWARF: - case RT_DWARF_2: + case Race::Dwarf: + case Race::KaladimCitizen: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; break; - case RT_OGRE: - case RT_OGRE_2: + case Race::Ogre: + case Race::OggokCitizen: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; m_pp.InnateSkills[InnateSlam] = InnateEnabled; m_pp.InnateSkills[InnateNoBash] = InnateEnabled; m_pp.InnateSkills[InnateBashDoor] = InnateEnabled; break; - case RT_HALFLING: - case RT_HALFLING_2: + case Race::Halfling: + case Race::RivervaleCitizen: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; break; - case RT_IKSAR: + case Race::Iksar: m_pp.InnateSkills[InnateRegen] = InnateEnabled; m_pp.InnateSkills[InnateInfravision] = InnateEnabled; break; - case RT_VAH_SHIR: + case Race::VahShir: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; break; - case RT_DARK_ELF: - case RT_DARK_ELF_2: - case RT_VAMPIRE_2: - case RT_FROGLOK_2: - case RT_GHOST: - case RT_GHOUL: - case RT_SKELETON: - case RT_VAMPIRE: - case RT_WILL_O_WISP: - case RT_ZOMBIE: - case RT_SPECTRE: - case RT_GHOST_2: - case RT_GHOST_3: - case RT_DRAGON_2: - case RT_INNORUUK: + case Race::DarkElf: + case Race::NeriakCitizen: + case Race::ElfVampire: + case Race::FroglokGhoul: + case Race::Ghost: + case Race::Ghoul: + case Race::Skeleton: + case Race::Vampire: + case Race::Wisp: + case Race::Zombie: + case Race::Spectre: + case Race::DwarfGhost: + case Race::EruditeGhost: + case Race::DragonSkeleton: + case Race::Innoruuk: m_pp.InnateSkills[InnateUltraVision] = InnateEnabled; break; - case RT_HUMAN: - case RT_GUARD: - case RT_BEGGAR: - case RT_HUMAN_2: - case RT_HUMAN_3: - case RT_FROGLOK_3: // client does froglok weird, but this should work out fine + case Race::Human: + case Race::FreeportGuard: + case Race::HumanBeggar: + case Race::HighpassCitizen: + case Race::QeynosCitizen: + case Race::Froglok2: // client does froglok weird, but this should work out fine break; default: m_pp.InnateSkills[InnateInfravision] = InnateEnabled; diff --git a/zone/entity.cpp b/zone/entity.cpp index bc14edb87..f4441aecf 100644 --- a/zone/entity.cpp +++ b/zone/entity.cpp @@ -4920,7 +4920,7 @@ void EntityList::ZoneWho(Client *c, Who_All_Struct *Who) FormatMSGID = 5023; // 5023 %T1[ANONYMOUS] %2 %3 %4 uint32 PlayerClass = Class::None; uint32 PlayerLevel = 0; - uint32 PlayerRace = RACE_DOUG_0; + uint32 PlayerRace = Race::Doug; uint32 ZoneMSGID = 0xFFFFFFFF; if (ClientEntry->GetAnon()==0) { @@ -5750,7 +5750,7 @@ void EntityList::DespawnGridNodes(int32 grid_id) { Mob *mob = m.second; if ( mob->IsNPC() && - mob->GetRace() == RACE_NODE_2254 && + mob->GetRace() == Race::Node && mob->EntityVariableExists("grid_id") && Strings::ToInt(mob->GetEntityVariable("grid_id")) == grid_id) { diff --git a/zone/gm_commands/find/race.cpp b/zone/gm_commands/find/race.cpp index 1b9fb23e7..4b15f1228 100644 --- a/zone/gm_commands/find/race.cpp +++ b/zone/gm_commands/find/race.cpp @@ -5,7 +5,7 @@ void FindRace(Client *c, const Seperator *sep) if (sep->IsNumber(2)) { const auto race_id = static_cast(Strings::ToUnsignedInt(sep->arg[2])); const std::string& race_name = GetRaceIDName(race_id); - if (EQ::ValueWithin(race_id, RACE_HUMAN_1, RACE_PEGASUS_732)) { + if (EQ::ValueWithin(race_id, Race::Human, Race::Pegasus3)) { c->Message( Chat::White, fmt::format( @@ -41,7 +41,7 @@ void FindRace(Client *c, const Seperator *sep) auto found_count = 0; - for (uint16 race_id = RACE_HUMAN_1; race_id <= RACE_PEGASUS_732; race_id++) { + for (uint16 race_id = Race::Human; race_id <= Race::Pegasus3; race_id++) { std::string race_name = GetRaceIDName(race_id); auto race_name_lower = Strings::ToLower(race_name); if (!Strings::Contains(race_name_lower, search_criteria)) { diff --git a/zone/gm_commands/set/race.cpp b/zone/gm_commands/set/race.cpp index 3ffe34996..48bb11f0c 100755 --- a/zone/gm_commands/set/race.cpp +++ b/zone/gm_commands/set/race.cpp @@ -23,7 +23,7 @@ void SetRace(Client *c, const Seperator *sep) const uint16 race_id = Strings::ToUnsignedInt(sep->arg[2]); if ( - !EQ::ValueWithin(race_id, RACE_DOUG_0, RuleI(NPC, MaxRaceID)) && + !EQ::ValueWithin(race_id, Race::Doug, RuleI(NPC, MaxRaceID)) && !EQ::ValueWithin(race_id, 2253, 2259) ) { c->Message( diff --git a/zone/gm_commands/show/zone_points.cpp b/zone/gm_commands/show/zone_points.cpp index 447370231..b5adc4602 100644 --- a/zone/gm_commands/show/zone_points.cpp +++ b/zone/gm_commands/show/zone_points.cpp @@ -4,7 +4,7 @@ void ShowZonePoints(Client *c, const Seperator *sep) { for (const auto& m : entity_list.GetMobList()) { Mob* mob = m.second; - if (mob->IsNPC() && mob->GetRace() == RACE_NODE_2254) { + if (mob->IsNPC() && mob->GetRace() == Race::Node) { mob->Depop(); } } diff --git a/zone/merc.cpp b/zone/merc.cpp index 16f6a8bf5..2d216b55b 100644 --- a/zone/merc.cpp +++ b/zone/merc.cpp @@ -3933,14 +3933,14 @@ float Merc::GetMaxMeleeRangeToTarget(Mob* target) { float size_mod = GetSize(); float other_size_mod = target->GetSize(); - if (GetRace() == RACE_LAVA_DRAGON_49 || GetRace() == RACE_WURM_158 || GetRace() == RACE_GHOST_DRAGON_196) //For races with a fixed size + if (GetRace() == Race::LavaDragon || GetRace() == Race::Wurm || GetRace() == Race::GhostDragon) //For races with a fixed size { size_mod = 60.0f; } else if (size_mod < 6.0) { size_mod = 8.0f; } - if (target->GetRace() == RACE_LAVA_DRAGON_49 || target->GetRace() == RACE_WURM_158 || target->GetRace() == RACE_GHOST_DRAGON_196) //For races with a fixed size + if (target->GetRace() == Race::LavaDragon || target->GetRace() == Race::Wurm || target->GetRace() == Race::GhostDragon) //For races with a fixed size { other_size_mod = 60.0f; } else if (other_size_mod < 6.0) { diff --git a/zone/mob.cpp b/zone/mob.cpp index f951961c5..e47ac753a 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -2867,7 +2867,7 @@ void Mob::ShowStats(Client* c) ); // Drakkin Features - if (t->GetRace() == RACE_DRAKKIN_522) { + if (t->GetRace() == Race::Drakkin) { c->Message( Chat::White, fmt::format( @@ -3526,7 +3526,7 @@ void Mob::GMMove(const glm::vec4 &position, bool save_guard_spot) { void Mob::SendIllusionPacket(const AppearanceStruct& a) { uint16 new_race = ( - a.race_id != RACE_DOUG_0 ? + a.race_id != Race::Doug ? a.race_id : (use_model ? use_model : GetBaseRace()) ); @@ -3558,7 +3558,7 @@ void Mob::SendIllusionPacket(const AppearanceStruct& a) uint32 new_drakkin_tattoo = a.drakkin_tattoo == UINT32_MAX ? GetDrakkinTattoo() : a.drakkin_tattoo; // Reset features to Base from the Player Profile - if (IsClient() && a.race_id == RACE_DOUG_0) { + if (IsClient() && a.race_id == Race::Doug) { new_beard = CastToClient()->GetBaseBeard(); new_beard_color = CastToClient()->GetBaseBeardColor(); new_drakkin_details = CastToClient()->GetBaseDetails(); @@ -3918,48 +3918,48 @@ uint16 Mob::GetFactionRace() { uint8 Mob::GetDefaultGender(uint16 in_race, uint8 in_gender) { if ( IsPlayerRace(in_race) || - in_race == RACE_BROWNIE_15 || - in_race == RACE_KERRAN_23 || - in_race == RACE_LION_50 || - in_race == RACE_DRACNID_57 || - in_race == RACE_ZOMBIE_70 || - in_race == RACE_QEYNOS_CITIZEN_71 || - in_race == RACE_RIVERVALE_CITIZEN_81 || - in_race == RACE_HALAS_CITIZEN_90 || - in_race == RACE_GROBB_CITIZEN_92 || - in_race == RACE_OGGOK_CITIZEN_93 || - in_race == RACE_KALADIM_CITIZEN_94 || - in_race == RACE_ELF_VAMPIRE_98 || - in_race == RACE_FELGUARD_106 || - in_race == RACE_FAYGUARD_112 || - in_race == RACE_ERUDITE_GHOST_118 || - in_race == RACE_IKSAR_CITIZEN_139 || - in_race == RACE_SHADE_224 || - in_race == RACE_TROLL_CREW_MEMBER_331 || - in_race == RACE_PIRATE_DECKHAND_332 || - in_race == RACE_GNOME_PIRATE_338 || - in_race == RACE_DARK_ELF_PIRATE_339 || - in_race == RACE_OGRE_PIRATE_340 || - in_race == RACE_HUMAN_PIRATE_341 || - in_race == RACE_ERUDITE_PIRATE_342 || - in_race == RACE_UNDEAD_PIRATE_344 || - in_race == RACE_KNIGHT_OF_HATE_351 || - in_race == RACE_WARLOCK_OF_HATE_352 || - in_race == RACE_UNDEAD_VAMPIRE_359 || - in_race == RACE_VAMPIRE_360 || - in_race == RACE_SAND_ELF_364 || - in_race == RACE_TAELOSIAN_NATIVE_385 || - in_race == RACE_TAELOSIAN_EVOKER_386 || - in_race == RACE_DRACHNID_461 || - in_race == RACE_ZOMBIE_471 || - in_race == RACE_ELDDAR_489 || - in_race == RACE_VAMPIRE_497 || - in_race == RACE_KERRAN_562 || - in_race == RACE_BROWNIE_568 || - in_race == RACE_HUMAN_566 || - in_race == RACE_ELVEN_GHOST_587 || - in_race == RACE_HUMAN_GHOST_588 || - in_race == RACE_COLDAIN_645 + in_race == Race::Brownie || + in_race == Race::Kerran || + in_race == Race::Lion || + in_race == Race::Drachnid || + in_race == Race::Zombie || + in_race == Race::QeynosCitizen || + in_race == Race::RivervaleCitizen || + in_race == Race::HalasCitizen || + in_race == Race::GrobbCitizen || + in_race == Race::OggokCitizen || + in_race == Race::KaladimCitizen || + in_race == Race::ElfVampire || + in_race == Race::Felguard || + in_race == Race::Fayguard || + in_race == Race::EruditeGhost || + in_race == Race::IksarCitizen || + in_race == Race::Shade || + in_race == Race::TrollCrewMember || + in_race == Race::PirateDeckhand || + in_race == Race::GnomePirate || + in_race == Race::DarkElfPirate || + in_race == Race::OgrePirate || + in_race == Race::HumanPirate || + in_race == Race::EruditePirate || + in_race == Race::TrollZombie || + in_race == Race::KnightOfHate || + in_race == Race::ArcanistOfHate || + in_race == Race::UndeadVampire || + in_race == Race::Vampire3 || + in_race == Race::SandElf || + in_race == Race::Nihil || + in_race == Race::Trusik || + in_race == Race::Drachnid2 || + in_race == Race::Zombie2 || + in_race == Race::Elddar || + in_race == Race::Vampire4 || + in_race == Race::Kerran2 || + in_race == Race::Brownie2 || + in_race == Race::Human2 || + in_race == Race::ElvenGhost || + in_race == Race::HumanGhost || + in_race == Race::Coldain2 ) { if (in_gender >= 2) { // Male default for PC Races return 0; @@ -3967,33 +3967,33 @@ uint8 Mob::GetDefaultGender(uint16 in_race, uint8 in_gender) { return in_gender; } } else if ( - in_race == RACE_FREEPORT_GUARD_44 || - in_race == RACE_MIMIC_52 || - in_race == RACE_HUMAN_BEGGAR_55 || - in_race == RACE_VAMPIRE_65 || - in_race == RACE_HIGHPASS_CITIZEN_67 || - in_race == RACE_NERIAK_CITIZEN_77 || - in_race == RACE_ERUDITE_CITIZEN_78 || - in_race == RACE_CLOCKWORK_GNOME_88 || - in_race == RACE_DWARF_GHOST_117 || - in_race == RACE_SPECTRAL_IKSAR_147 || - in_race == RACE_INVISIBLE_MAN_127 || - in_race == RACE_VAMPYRE_208 || - in_race == RACE_RECUSO_237 || - in_race == RACE_BROKEN_SKULL_PIRATE_333 || - in_race == RACE_INVISIBLE_MAN_OF_ZOMM_600 || - in_race == RACE_OGRE_NPC_MALE_624 || - in_race == RACE_BEEFEATER_667 || - in_race == RACE_ERUDITE_678 + in_race == Race::FreeportGuard || + in_race == Race::Mimic || + in_race == Race::HumanBeggar || + in_race == Race::Vampire || + in_race == Race::HighpassCitizen || + in_race == Race::NeriakCitizen || + in_race == Race::EruditeCitizen || + in_race == Race::ClockworkGnome || + in_race == Race::DwarfGhost || + in_race == Race::IksarSpirit || + in_race == Race::InvisibleMan || + in_race == Race::Vampire2 || + in_race == Race::Recuso || + in_race == Race::BrokenSkullPirate || + in_race == Race::InvisibleManOfZomm || + in_race == Race::Ogre2 || + in_race == Race::RoyalGuard || + in_race == Race::Erudite2 ) { // Male only races return 0; } else if ( - in_race == RACE_FAIRY_25 || - in_race == RACE_PIXIE_56 || - in_race == RACE_BANSHEE_487 || - in_race == RACE_BANSHEE_488 || - in_race == RACE_AYONAE_RO_498 || - in_race == RACE_SULLON_ZEK_499 + in_race == Race::Fairy || + in_race == Race::Pixie || + in_race == Race::Banshee2 || + in_race == Race::Banshee3 || + in_race == Race::AyonaeRo || + in_race == Race::SullonZek ) { // Female only races return 1; } else { // Neutral default for NPC Races @@ -6867,22 +6867,22 @@ void Mob::RemoveAllNimbusEffects() bool Mob::IsBoat() const { return ( - race == RACE_SHIP_72 || - race == RACE_LAUNCH_73 || - race == RACE_GHOST_SHIP_114 || - race == RACE_SHIP_404 || - race == RACE_MERCHANT_SHIP_550 || - race == RACE_PIRATE_SHIP_551 || - race == RACE_GHOST_SHIP_552 || - race == RACE_BOAT_533 + race == Race::Ship || + race == Race::Launch || + race == Race::GhostShip || + race == Race::DiscordShip || + race == Race::MerchantShip || + race == Race::PirateShip || + race == Race::GhostShip2 || + race == Race::Boat2 ); } bool Mob::IsControllableBoat() const { return ( - race == RACE_BOAT_141 || - race == RACE_ROWBOAT_502 + race == Race::Boat || + race == Race::Rowboat ); } @@ -8218,37 +8218,37 @@ int Mob::DispatchZoneControllerEvent( std::string Mob::GetRacePlural() { switch (GetBaseRace()) { - case RACE_HUMAN_1: + case Race::Human: return "Humans"; - case RACE_BARBARIAN_2: + case Race::Barbarian: return "Barbarians"; - case RACE_ERUDITE_3: + case Race::Erudite: return "Erudites"; - case RACE_WOOD_ELF_4: + case Race::WoodElf: return "Wood Elves"; - case RACE_HIGH_ELF_5: + case Race::HighElf: return "High Elves"; - case RACE_DARK_ELF_6: + case Race::DarkElf: return "Dark Elves"; - case RACE_HALF_ELF_7: + case Race::HalfElf: return "Half Elves"; - case RACE_DWARF_8: + case Race::Dwarf: return "Dwarves"; - case RACE_TROLL_9: + case Race::Troll: return "Trolls"; - case RACE_OGRE_10: + case Race::Ogre: return "Ogres"; - case RACE_HALFLING_11: + case Race::Halfling: return "Halflings"; - case RACE_GNOME_12: + case Race::Gnome: return "Gnomes"; - case RACE_IKSAR_128: + case Race::Iksar: return "Iksar"; - case RACE_VAH_SHIR_130: + case Race::VahShir: return "Vah Shir"; - case RACE_FROGLOK_330: + case Race::Froglok2: return "Frogloks"; - case RACE_DRAKKIN_522: + case Race::Drakkin: return "Drakkin"; default: return "Races"; diff --git a/zone/mob.h b/zone/mob.h index 8287de96a..f06a2955f 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -83,7 +83,7 @@ struct AppearanceStruct { uint8 hair = UINT8_MAX; uint8 hair_color = UINT8_MAX; uint8 helmet_texture = UINT8_MAX; - uint16 race_id = RACE_DOUG_0; + uint16 race_id = Race::Doug; bool send_effects = true; float size = -1.0f; Client *target = nullptr; diff --git a/zone/npc.cpp b/zone/npc.cpp index 028a6dc7f..aec368a21 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -155,10 +155,10 @@ NPC::NPC(const NPCType *npc_type_data, Spawn2 *in_respawn, const glm::vec4 &posi // lava dragon is a fixed size model and should always use its default // otherwise pathing issues - if (race == RACE_LAVA_DRAGON_49) { + if (race == Race::LavaDragon) { size = 5; } - if (race == RACE_WURM_158) { + if (race == Race::Wurm) { size = 15; } @@ -3691,25 +3691,25 @@ void NPC::ScaleNPC(uint8 npc_level, bool always_scale, bool override_special_abi bool NPC::IsGuard() { switch (GetRace()) { - case RT_GUARD: + case Race::FreeportGuard: if (GetTexture() == 1 || GetTexture() == 2) return true; break; - case RT_IKSAR_2: + case Race::IksarCitizen: if (GetTexture() == 1) return true; break; - case RT_GUARD_2: - case RT_GUARD_3: - case RT_GUARD_4: - case RT_HUMAN_3: - case RT_HALFLING_2: - case RT_ERUDITE_2: - case RT_BARBARIAN_2: - case RT_DARK_ELF_2: - case RT_TROLL_2: + case Race::Felguard: + case Race::Fayguard: + case Race::VahShirGuard: + case Race::QeynosCitizen: + case Race::RivervaleCitizen: + case Race::EruditeCitizen: + case Race::HalasCitizen: + case Race::NeriakCitizen: + case Race::GrobbCitizen: case OGGOK_CITIZEN: - case RT_DWARF_2: + case Race::KaladimCitizen: return true; default: break; diff --git a/zone/petitions.cpp b/zone/petitions.cpp index 1610ad82c..1f4dd8ff7 100644 --- a/zone/petitions.cpp +++ b/zone/petitions.cpp @@ -71,7 +71,7 @@ Petition::Petition(uint32 id) { petid = id; charclass = Class::None; - charrace = RACE_DOUG_0; + charrace = Race::Doug; charlevel = 0; checkouts = 0; unavailables = 0; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index b7539c821..df00b24c5 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -7430,42 +7430,42 @@ bool Mob::PassCastRestriction(int value) case IS_BIXIE: case IS_BIXIE2: - if ((GetRace() == RT_BIXIE) ||(GetRace() == RT_BIXIE_2)) + if ((GetRace() == Race::Bixie) ||(GetRace() == Race::Bixie2)) return true; break; case IS_HARPY: - if ((GetRace() == RT_HARPY) ||(GetRace() == RT_HARPY_2)) + if ((GetRace() == Race::Harpy) ||(GetRace() == Race::Harpy2)) return true; break; case IS_GNOLL: - if ((GetRace() == RT_GNOLL) || (GetRace() == RT_GNOLL_2) || (GetRace() == RT_GNOLL_3)) + if ((GetRace() == Race::Gnoll) || (GetRace() == Race::Gnoll2) || (GetRace() == Race::Gnoll3)) return true; break; case IS_SPORALI: - if ((GetRace() == RT_SPORALI) ||(GetRace() == RT_FUNGUSMAN)) + if ((GetRace() == Race::Sporali) ||(GetRace() == Race::Fungusman)) return true; break; case IS_KOBOLD: - if ((GetRace() == RT_KOBOLD) ||(GetRace() == RT_KOBOLD_2)) + if ((GetRace() == Race::Kobold) ||(GetRace() == Race::Kobold2)) return true; break; case IS_FROSTCRYPT_SHADE: - if (GetRace() == RT_GIANT_SHADE) + if (GetRace() == Race::GiantShade) return true; break; case IS_DRAKKIN: - if (GetRace() == RT_DRAKKIN) + if (GetRace() == Race::Drakkin) return true; break; case IS_UNDEAD_OR_VALDEHOLM_GIANT: - if (GetBodyType() == BT_Undead || GetRace() == RT_GIANT_12 || GetRace() == RT_GIANT_13) + if (GetBodyType() == BT_Undead || GetRace() == Race::Giant2 || GetRace() == Race::Giant3) return true; break; @@ -7496,7 +7496,7 @@ bool Mob::PassCastRestriction(int value) break; case IS_FAE_OR_PIXIE: - if ((GetRace() == RT_PIXIE) || (GetRace() == RT_FAY_DRAKE)) + if ((GetRace() == Race::Pixie) || (GetRace() == Race::FayDrake)) return true; break; @@ -7511,12 +7511,12 @@ bool Mob::PassCastRestriction(int value) break; case IS_CLOCKWORK_AND_HP_LESS_THAN_45_PCT: - if ((GetRace() == RT_GNOMEWORK || GetRace() == RACE_CLOCKWORK_GNOME_88) && (GetHPRatio() < 45)) + if ((GetRace() == Race::Gnomework || GetRace() == Race::ClockworkGnome) && (GetHPRatio() < 45)) return true; break; case IS_WISP_AND_HP_LESS_THAN_10_PCT: - if ((GetRace() == RT_WILL_O_WISP) && (GetHPRatio() < 10)) + if ((GetRace() == Race::Wisp) && (GetHPRatio() < 10)) return true; break; @@ -7889,12 +7889,12 @@ bool Mob::PassCastRestriction(int value) break; case IS_TREANT: - if (GetRace() == RT_TREANT || GetRace() == RT_TREANT_2 || GetRace() == RT_TREANT_3) + if (GetRace() == Race::Treant || GetRace() == Race::Treant2 || GetRace() == Race::Treant3) return true; break; case IS_SCARECROW: - if (GetRace() == RT_SCARECROW || GetRace() == RT_SCARECROW_2) + if (GetRace() == Race::Scarecrow || GetRace() == Race::Scarecrow2) return true; break; @@ -10263,7 +10263,7 @@ void Mob::ApplySpellEffectIllusion(int32 spell_id, Mob *caster, int buffslot, in gender_id ); - if (base != RACE_ELEMENTAL_75 && base != RACE_DRAKKIN_522) { + if (base != Race::Elemental && base != Race::Drakkin) { if (max > 0) { if (limit == 0) { SendIllusionPacket( @@ -10303,7 +10303,7 @@ void Mob::ApplySpellEffectIllusion(int32 spell_id, Mob *caster, int buffslot, in } ); } - } else if (base == RACE_ELEMENTAL_75){ + } else if (base == Race::Elemental){ SendIllusionPacket( AppearanceStruct{ .gender_id = static_cast(gender_id), @@ -10311,7 +10311,7 @@ void Mob::ApplySpellEffectIllusion(int32 spell_id, Mob *caster, int buffslot, in .texture = static_cast(limit), } ); - } else if (base == RACE_DRAKKIN_522) { + } else if (base == Race::Drakkin) { FaceChange_Struct f{ .haircolor = GetHairColor(), .beardcolor = GetBeardColor(), diff --git a/zone/waypoints.cpp b/zone/waypoints.cpp index df126ab6c..4cd030410 100644 --- a/zone/waypoints.cpp +++ b/zone/waypoints.cpp @@ -880,118 +880,118 @@ float Mob::GetZOffset() const { float offset = 3.125f; switch (GetModel()) { - case RACE_BASILISK_436: + case Race::Basilisk: offset = 0.577f; break; - case RACE_DRAKE_430: + case Race::Drake2: offset = 0.5f; break; - case RACE_DRAKE_432: + case Race::Drake3: offset = 1.9f; break; - case RACE_DRAGON_435: + case Race::Dragon: offset = 0.93f; break; - case RACE_LAVA_SPIDER_450: + case Race::LavaSpider: offset = 0.938f; break; - case RACE_ALLIGATOR_479: + case Race::Alligator2: offset = 0.8f; break; - case RACE_LAVA_SPIDER_QUEEN_451: + case Race::LavaSpiderQueen: offset = 0.816f; break; - case RACE_DRAGON_437: + case Race::Dragon2: offset = 0.527f; break; - case RACE_PUMA_439: + case Race::Puma2: offset = 1.536f; break; - case RACE_RAT_415: + case Race::Rat: offset = 1.0f; break; - case RACE_DRAGON_438: - case RACE_DRAGON_452: + case Race::Dragon3: + case Race::Dragon4: offset = 0.776f; break; - case RACE_SPIDER_QUEEN_441: + case Race::SpiderQueen: offset = 0.816f; break; - case RACE_SPIDER_440: + case Race::Spider: offset = 0.938f; break; - case RACE_IMP_46: - case RACE_SNAKE_468: - case RACE_CORATHUS_459: + case Race::Imp: + case Race::Snake: + case Race::Corathus: offset = 1.0f; break; - case RACE_DRACHNID_COCOON_462: + case Race::DrachnidCocoon: offset = 1.5f; break; - case RACE_DRAGON_530: + case Race::Dragon5: offset = 1.2f; break; - case RACE_GOO_549: - case RACE_GOO_548: + case Race::Goo4: + case Race::Goo3: offset = 0.5f; break; - case RACE_GOO_547: + case Race::Goo2: offset = 0.5f; break; - case RACE_DRACOLICH_604: + case Race::Dracolich: offset = 1.2f; break; - case RACE_TELMIRA_653: + case Race::Telmira: offset = 5.9f; break; - case RACE_MORELL_THULE_658: + case Race::MorellThule: offset = 4.0f; break; - case RACE_ARMOR_OF_MARR_323: - case RACE_AMYGDALAN_663: + case Race::AnimatedArmor: + case Race::Amygdalan: offset = 5.0f; break; - case RACE_SPECTRAL_IKSAR_147: - case RACE_SANDMAN_664: + case Race::IksarSpirit: + case Race::Sandman: offset = 4.0f; break; - case RACE_LAVA_DRAGON_49: - case RACE_ALARAN_SENTRY_STONE_703: + case Race::LavaDragon: + case Race::AlaranSentryStone: offset = 9.0f; break; - case RACE_RABBIT_668: + case Race::Rabbit: offset = 5.0f; break; - case RACE_WURM_158: - case RACE_BLIND_DREAMER_669: + case Race::Wurm: + case Race::BlindDreamer: offset = 7.0f; break; - case RACE_SIREN_187: - case RACE_HALAS_CITIZEN_90: - case RACE_OTTERMAN_190: + case Race::Siren: + case Race::HalasCitizen: + case Race::Othmir: offset = .5f; break; - case RACE_COLDAIN_183: + case Race::Coldain: offset = .6f; break; - case RACE_WEREWOLF_14: + case Race::Werewolf: offset = 1.2f; break; - case RACE_DWARF_8: + case Race::Dwarf: offset = .7f; break; - case RACE_HORSE_216: + case Race::Horse: offset = 1.4f; break; - case RACE_ENCHANTED_ARMOR_175: - case RACE_TIGER_63: + case Race::EnchantedArmor: + case Race::Tiger: offset = 1.75f; break; - case RACE_STATUE_OF_RALLOS_ZEK_66: + case Race::StatueOfRallosZek: offset = 1.0f; break; - case RACE_GORAL_687: - case RACE_SELYRAH_686: + case Race::Goral: + case Race::Selyrah: offset = 2.0f; break; default: