Core/DBC: Use CreatureType flags in Creature::CanGiveExperience calculation

This commit is contained in:
HelloKitty
2020-04-27 23:22:26 -05:00
parent 636e64fa38
commit 0d61e653f4
3 changed files with 15 additions and 4 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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";