From 8ce8408f912af64dee338bf891374517c9f163ee Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 22 Feb 2022 13:49:20 -0500 Subject: [PATCH] Core/Misc: Define and use ChrRacesFlag and CreatureModelDataFlags Port From (https://github.com/TrinityCore/TrinityCore/commit/d30e4a20e52a5025c59bfc746570ff7ef06af6f4) --- Source/Framework/Constants/CliDBConst.cs | 56 ++++++++++++++++++-- Source/Game/DataStorage/Structs/C_Records.cs | 4 +- Source/Game/Entities/Player/Player.cs | 2 +- Source/Game/Entities/Unit/Unit.cs | 4 +- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/Source/Framework/Constants/CliDBConst.cs b/Source/Framework/Constants/CliDBConst.cs index 6583cd6b1..a9668f28c 100644 --- a/Source/Framework/Constants/CliDBConst.cs +++ b/Source/Framework/Constants/CliDBConst.cs @@ -1000,9 +1000,34 @@ namespace Framework.Constants Factional = 0x40 } + [Flags] public enum ChrRacesFlag { - AlliedRace = 0x80000 + NPCOnly = 0x01, + DoNotComponentFeet = 0x02, + CanMount = 0x04, + HasBald = 0x08, + BindToStartingArea = 0x10, + AlternateForm = 0x20, + CanMountSelf = 0x40, + ForceToHDModelIfAvailable = 0x80, + ExaltedWithAllVendors = 0x100, + NotSelectable = 0x200, + ReputationBonus = 0x400, + UseLoincloth = 0x800, + RestBonus = 0x1000, + NoStartKits = 0x2000, + NoStartingWeapon = 0x4000, + DontRedeemAccountLicenses = 0x8000, + SkinVariationIsHairColor = 0x10000, + UsePandarenRingForComponentingTexture = 0x20000, + IgnoreForAssetManifestComponentInfoParsing = 0x40000, + IsAlliedRace = 0x80000, + VoidVendorDiscount = 0x100000, + DAMMComponentNoMaleGeneration = 0x200000, + DAMMComponentNoFemaleGeneration = 0x400000, + NoAssociatedFactionReputationInRaceChange = 0x800000, + InternalOnly = 0x100000, } public enum ChrSpecializationFlag @@ -1618,9 +1643,9 @@ namespace Framework.Constants public enum PhaseEntryFlags : ushort { - ReadOnly = 0x001, - InternalPhase = 0x002, - Normal = 0x008, + ReadOnly = 0x1, + InternalPhase = 0x2, + Normal = 0x8, Cosmetic = 0x010, Personal = 0x020, Expensive = 0x040, @@ -2189,6 +2214,29 @@ namespace Framework.Constants Disabled = 0x1 } + [Flags] + public enum CreatureModelDataFlags + { + NoFootprintParticles = 0x01, + NoBreathParticles = 0x02, + IsPlayerModel = 0x04, + NoAttachedWeapons = 0x10, + NoFootprintTrailTextures = 0x20, + DisableHighlight = 0x40, + CanMountWhileTransformedAsThis = 0x80, + DisableScaleInterpolation = 0x100, + ForceProjectedTex = 0x200, + CanJumpInPlaceAsMount = 0x400, + AICannotUseWalkBackwardsAnim = 0x800, + IgnoreSpineLowForSplitBody = 0x1000, + IgnoreHeadForSplitBody = 0x2000, + IgnoreSpineLowForSplitBodyWhenFlying = 0x4000, + IgnoreHeadForSplitBodyWhenFlying = 0x8000, + UseWheelAnimationOnUnitWheelBones = 0x10000, + IsHDModel = 0x20000, + SuppressEmittersOnLowSettings = 0x40000 + } + public enum FriendshipReputationFlags : int { NoFXOnReactionChange = 0x01, diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index 0b0be4ac1..274d92336 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -246,7 +246,7 @@ namespace Game.DataStorage public int Flags; public int FactionID; public uint CinematicSequenceID; - public int ResSicknessSpellID; + public uint ResSicknessSpellID; public int SplashSoundID; public int Alliance; public int RaceRelated; @@ -471,6 +471,8 @@ namespace Game.DataStorage public sbyte Unknown820_1; // scale related public float Unknown820_2; // scale related public float[] Unknown820_3 = new float[2]; // scale related + + public CreatureModelDataFlags GetFlags() { return (CreatureModelDataFlags)Flags; } } public sealed class CreatureTypeRecord diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 722c524c9..010914486 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -1883,7 +1883,7 @@ namespace Game.Entities public uint GetStartLevel(Race race, Class playerClass, Optional characterTemplateId = default) { uint startLevel = WorldConfig.GetUIntValue(WorldCfg.StartPlayerLevel); - if (CliDB.ChrRacesStorage.LookupByKey(race).GetFlags().HasAnyFlag(ChrRacesFlag.AlliedRace)) + if (CliDB.ChrRacesStorage.LookupByKey(race).GetFlags().HasAnyFlag(ChrRacesFlag.IsAlliedRace)) startLevel = WorldConfig.GetUIntValue(WorldCfg.StartAlliedRaceLevel); if (playerClass == Class.Deathknight) diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 061793e6c..8205bbcf8 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -301,8 +301,8 @@ namespace Game.Entities CreatureModelDataRecord model = CliDB.CreatureModelDataStorage.LookupByKey(display.ModelID); ChrRacesRecord race = CliDB.ChrRacesStorage.LookupByKey(displayExtra.DisplayRaceID); - if (model != null && !Convert.ToBoolean(model.Flags & 0x80)) - if (race != null && !Convert.ToBoolean(race.Flags & 0x4)) + if (model != null && !model.GetFlags().HasFlag(CreatureModelDataFlags.CanMountWhileTransformedAsThis)) + if (race != null && !race.GetFlags().HasFlag(ChrRacesFlag.CanMount)) return true; return false;