/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef RaceMask_h__ #define RaceMask_h__ #include "Define.h" #include // EnumUtils: DESCRIBE THIS enum Races { RACE_NONE = 0, // SKIP RACE_HUMAN = 1, // TITLE Human RACE_ORC = 2, // TITLE Orc RACE_DWARF = 3, // TITLE Dwarf RACE_NIGHTELF = 4, // TITLE Night Elf RACE_UNDEAD_PLAYER = 5, // TITLE Undead RACE_TAUREN = 6, // TITLE Tauren RACE_GNOME = 7, // TITLE Gnome RACE_TROLL = 8, // TITLE Troll RACE_GOBLIN = 9, // TITLE Goblin RACE_BLOODELF = 10, // TITLE Blood Elf RACE_DRAENEI = 11, // TITLE Draenei //RACE_FEL_ORC = 12, //RACE_NAGA = 13, //RACE_BROKEN = 14, //RACE_SKELETON = 15, //RACE_VRYKUL = 16, //RACE_TUSKARR = 17, //RACE_FOREST_TROLL = 18, //RACE_TAUNKA = 19, //RACE_NORTHREND_SKELETON = 20, //RACE_ICE_TROLL = 21, RACE_WORGEN = 22, // TITLE Worgen //RACE_GILNEAN = 23, RACE_PANDAREN_NEUTRAL = 24, // TITLE Pandaren DESCRIPTION Pandaren (Neutral) RACE_PANDAREN_ALLIANCE = 25, // TITLE Pandaren DESCRIPTION Pandaren (Alliance) RACE_PANDAREN_HORDE = 26, // TITLE Pandaren DESCRIPTION Pandaren (Horde) RACE_NIGHTBORNE = 27, // TITLE Nightborne RACE_HIGHMOUNTAIN_TAUREN = 28, // TITLE Highmountain Tauren RACE_VOID_ELF = 29, // TITLE Void Elf RACE_LIGHTFORGED_DRAENEI = 30, // TITLE Lightforged Draenei RACE_ZANDALARI_TROLL = 31, // TITLE Zandalari Troll RACE_KUL_TIRAN = 32, // TITLE Kul Tiran //RACE_THIN_HUMAN = 33, RACE_DARK_IRON_DWARF = 34, // TITLE Dark Iron Dwarf DESCRIPTION Dark Iron Dwarf (RaceMask bit 11) RACE_VULPERA = 35, // TITLE Vulpera DESCRIPTION Vulpera (RaceMask bit 12) RACE_MAGHAR_ORC = 36, // TITLE Mag'har Orc DESCRIPTION Mag'har Orc (RaceMask bit 13) RACE_MECHAGNOME = 37 // TITLE Mechagnome DESCRIPTION Mechagnome (RaceMask bit 14) }; // max+1 for player race #define MAX_RACES 38 namespace Trinity { template struct RaceMask { static_assert(std::is_integral::value, "RaceMask must be integral"); T RawValue; constexpr bool HasRace(uint8 raceId) const { return (RawValue & GetMaskForRace(raceId)) != 0; } static constexpr T GetMaskForRace(uint8 raceId) { constexpr int32 raceBits[MAX_RACES] = { 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, 11, 12, 13, 14 }; return raceId < MAX_RACES && raceBits[raceId] >= 0 && raceBits[raceId] < 64 ? (T(1) << raceBits[raceId]) : T(0); } constexpr operator bool() const { return RawValue != T(0); } constexpr bool operator!() const { return !operator bool(); } }; } constexpr uint64 RACEMASK_ALL_PLAYABLE = std::integral_constant::GetMaskForRace(RACE_HUMAN) | Trinity::RaceMask::GetMaskForRace(RACE_ORC) | Trinity::RaceMask::GetMaskForRace(RACE_DWARF) | Trinity::RaceMask::GetMaskForRace(RACE_NIGHTELF) | Trinity::RaceMask::GetMaskForRace(RACE_UNDEAD_PLAYER) | Trinity::RaceMask::GetMaskForRace(RACE_TAUREN) | Trinity::RaceMask::GetMaskForRace(RACE_GNOME) | Trinity::RaceMask::GetMaskForRace(RACE_TROLL) | Trinity::RaceMask::GetMaskForRace(RACE_BLOODELF) | Trinity::RaceMask::GetMaskForRace(RACE_DRAENEI) | Trinity::RaceMask::GetMaskForRace(RACE_GOBLIN) | Trinity::RaceMask::GetMaskForRace(RACE_WORGEN) | Trinity::RaceMask::GetMaskForRace(RACE_PANDAREN_NEUTRAL) | Trinity::RaceMask::GetMaskForRace(RACE_PANDAREN_ALLIANCE) | Trinity::RaceMask::GetMaskForRace(RACE_PANDAREN_HORDE) | Trinity::RaceMask::GetMaskForRace(RACE_NIGHTBORNE) | Trinity::RaceMask::GetMaskForRace(RACE_HIGHMOUNTAIN_TAUREN) | Trinity::RaceMask::GetMaskForRace(RACE_VOID_ELF) | Trinity::RaceMask::GetMaskForRace(RACE_LIGHTFORGED_DRAENEI) | Trinity::RaceMask::GetMaskForRace(RACE_ZANDALARI_TROLL) | Trinity::RaceMask::GetMaskForRace(RACE_KUL_TIRAN) | Trinity::RaceMask::GetMaskForRace(RACE_DARK_IRON_DWARF) | Trinity::RaceMask::GetMaskForRace(RACE_VULPERA) | Trinity::RaceMask::GetMaskForRace(RACE_MAGHAR_ORC) | Trinity::RaceMask::GetMaskForRace(RACE_MECHAGNOME)>::value; constexpr uint64 RACEMASK_NEUTRAL = std::integral_constant::GetMaskForRace(RACE_PANDAREN_NEUTRAL)>::value; constexpr uint64 RACEMASK_ALLIANCE = std::integral_constant::GetMaskForRace(RACE_HUMAN) | Trinity::RaceMask::GetMaskForRace(RACE_DWARF) | Trinity::RaceMask::GetMaskForRace(RACE_NIGHTELF) | Trinity::RaceMask::GetMaskForRace(RACE_GNOME) | Trinity::RaceMask::GetMaskForRace(RACE_DRAENEI) | Trinity::RaceMask::GetMaskForRace(RACE_WORGEN) | Trinity::RaceMask::GetMaskForRace(RACE_PANDAREN_ALLIANCE) | Trinity::RaceMask::GetMaskForRace(RACE_VOID_ELF) | Trinity::RaceMask::GetMaskForRace(RACE_LIGHTFORGED_DRAENEI) | Trinity::RaceMask::GetMaskForRace(RACE_KUL_TIRAN) | Trinity::RaceMask::GetMaskForRace(RACE_DARK_IRON_DWARF) | Trinity::RaceMask::GetMaskForRace(RACE_MECHAGNOME)>::value; constexpr uint64 RACEMASK_HORDE = std::integral_constant::value; #endif // RaceMask_h__