diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 784afa5e9e6..238ab097569 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3245,8 +3245,12 @@ void Creature::ClearTextRepeatGroup(uint8 textGroup) bool Creature::CanGiveExperience() const { - return !IsCritter() - && !IsPet() + CreatureTypeEntry const* creatureType = sCreatureTypeStore.AssertEntry(GetCreatureType()); + + if (creatureType->HasFlag(CreatureTypeEntryFlags::CREATURE_TYPE_ENTRY_FLAGS_NO_EXPERIENCE)) + return false; + + return !IsPet() && !IsTotem() && !(GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL); } diff --git a/src/server/shared/DataStores/DBCStructure.h b/src/server/shared/DataStores/DBCStructure.h index bd542027ce7..597bc2ad7a5 100644 --- a/src/server/shared/DataStores/DBCStructure.h +++ b/src/server/shared/DataStores/DBCStructure.h @@ -529,12 +529,19 @@ struct CreatureSpellDataEntry //uint32 availability[MAX_CREATURE_SPELL_DATA_SLOT]; // 4-7 m_availability[4] }; +enum CreatureTypeEntryFlags +{ + CREATURE_TYPE_ENTRY_FLAGS_NO_EXPERIENCE = 0x01 +}; + struct CreatureTypeEntry { uint32 ID; // 0 m_ID //char* Name[16]; // 1-16 name // 17 string flags - //uint32 no_expirience; // 18 no exp? critters, non-combat pets, gas cloud. + uint32 Flags; // 18 no exp? critters, non-combat pets, gas cloud. (called Flags in struct) + + inline bool HasFlag(CreatureTypeEntryFlags flag) const { return !!(Flags & flag); } }; /* not used diff --git a/src/server/shared/DataStores/DBCfmt.h b/src/server/shared/DataStores/DBCfmt.h index 00267759742..3b1e03c2ad3 100644 --- a/src/server/shared/DataStores/DBCfmt.h +++ b/src/server/shared/DataStores/DBCfmt.h @@ -45,7 +45,7 @@ char constexpr CreatureDisplayInfoExtrafmt[] = "diixxxxxxxxxxxxxxxxxx"; char constexpr CreatureFamilyfmt[] = "nfifiiiiixssssssssssssssssxx"; char constexpr CreatureModelDatafmt[] = "nisxfxxxxxxxxxxffxxxxxxxxxxx"; char constexpr CreatureSpellDatafmt[] = "niiiixxxx"; -char constexpr CreatureTypefmt[] = "nxxxxxxxxxxxxxxxxxx"; +char constexpr CreatureTypefmt[] = "nxxxxxxxxxxxxxxxxxi"; char constexpr CurrencyTypesfmt[] = "xnxi"; char constexpr DestructibleModelDatafmt[] = "nxxixxxixxxixxxixxx"; char constexpr DungeonEncounterfmt[] = "niixissssssssssssssssxx";