diff options
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 7 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 3aa228d409d..6537c31c890 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8459,7 +8459,10 @@ uint32 Unit::GetCreatureType() const if (ssEntry && ssEntry->CreatureType > 0) return ssEntry->CreatureType; else - return CREATURE_TYPE_HUMANOID; + { + ChrRacesEntry const* raceEntry = sChrRacesStore.AssertEntry(GetRace()); + return raceEntry->CreatureType; + } } else return ToCreature()->GetCreatureTemplate()->type; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 4297cc4e79e..61cc65af1c3 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -664,6 +664,13 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact if (!HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK)) { + if (raceEntry->GetFlags().HasFlag(ChrRacesFlag::NPCOnly)) + { + TC_LOG_ERROR("network", "Race (%u) was not playable but requested while creating new char for account (ID: %u): wrong DBC files or cheater?", charCreate.CreateInfo->Race, GetAccountId()); + SendCharCreate(CHAR_CREATE_DISABLED); + return; + } + Trinity::RaceMask<uint64> raceMaskDisabled{ sWorld->GetUInt64Config(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK) }; if (raceMaskDisabled.HasRace(charCreate.CreateInfo->Race)) { |
