From 06009931296bea2580102429a9f6bdd672452d64 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 22 Feb 2022 14:08:30 -0500 Subject: [PATCH] Further improve ChrRace DBC handling Port From (https://github.com/TrinityCore/TrinityCore/commit/406c7219ad6454a3f3855c9e0732245dcc34b2dc) --- Source/Game/Entities/Unit/Unit.cs | 5 ++++- Source/Game/Handlers/CharacterHandler.cs | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 8205bbcf8..18dd0bbdb 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -1980,7 +1980,10 @@ namespace Game.Entities if (ssEntry != null && ssEntry.CreatureType > 0) return (CreatureType)ssEntry.CreatureType; else - return CreatureType.Humanoid; + { + var raceEntry = CliDB.ChrRacesStorage.LookupByKey(GetRace()); + return raceEntry.CreatureType; + } } else return ToCreature().GetCreatureTemplate().CreatureType; diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 3c12304c7..9dac19594 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -356,6 +356,13 @@ namespace Game if (!HasPermission(RBACPermissions.SkipCheckCharacterCreationRacemask)) { + if (raceEntry.GetFlags().HasFlag(ChrRacesFlag.NPCOnly)) + { + Log.outError(LogFilter.Network, $"Race ({charCreate.CreateInfo.RaceId}) was not playable but requested while creating new char for account (ID: {GetAccountId()}): wrong DBC files or cheater?"); + SendCharCreate(ResponseCodes.CharCreateDisabled); + return; + } + ulong raceMaskDisabled = WorldConfig.GetUInt64Value(WorldCfg.CharacterCreatingDisabledRacemask); if (Convert.ToBoolean((ulong)SharedConst.GetMaskForRace(charCreate.CreateInfo.RaceId) & raceMaskDisabled)) {