Core/Creature: fixed falling back to creature_template flag data when not overriden in creature table
*fixed column type of npcflag for creature table
This commit is contained in:
1 parent
bb6a8ac297
commit
34fa3e1a1c
3 files changed
+28
-30
No files matched your search
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE `creature`
|
||||||
|
CHANGE `npcflag` `npcflag` INT(10) UNSIGNED NULL;
|
||||||
@@ -585,7 +585,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
|
|||||||
|
|
||||||
SetFaction(cInfo->faction);
|
SetFaction(cInfo->faction);
|
||||||
|
|
||||||
uint32 npcflags, unitFlags, unitFlags2;
|
uint32 npcflags = 0, unitFlags = 0, unitFlags2 = 0;
|
||||||
ObjectMgr::ChooseCreatureFlags(cInfo, &npcflags, &unitFlags, &unitFlags2, _staticFlags, data);
|
ObjectMgr::ChooseCreatureFlags(cInfo, &npcflags, &unitFlags, &unitFlags2, _staticFlags, data);
|
||||||
|
|
||||||
if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT)
|
if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT)
|
||||||
@@ -1989,10 +1989,10 @@ void Creature::setDeathState(DeathState s)
|
|||||||
if (!IsPet())
|
if (!IsPet())
|
||||||
{
|
{
|
||||||
CreatureData const* creatureData = GetCreatureData();
|
CreatureData const* creatureData = GetCreatureData();
|
||||||
CreatureTemplate const* cinfo = GetCreatureTemplate();
|
CreatureTemplate const* cInfo = GetCreatureTemplate();
|
||||||
|
|
||||||
uint32 npcflag, unitFlags, unitFlags2;
|
uint32 npcflag = 0, unitFlags = 0, unitFlags2 = 0;
|
||||||
ObjectMgr::ChooseCreatureFlags(cinfo, &npcflag, &unitFlags, &unitFlags2, _staticFlags, creatureData);
|
ObjectMgr::ChooseCreatureFlags(cInfo, &npcflag, &unitFlags, &unitFlags2, _staticFlags, creatureData);
|
||||||
|
|
||||||
SetUInt32Value(UNIT_NPC_FLAGS, npcflag);
|
SetUInt32Value(UNIT_NPC_FLAGS, npcflag);
|
||||||
SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags);
|
SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags);
|
||||||
@@ -2001,7 +2001,7 @@ void Creature::setDeathState(DeathState s)
|
|||||||
|
|
||||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
|
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
|
||||||
|
|
||||||
SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool));
|
SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool));
|
||||||
}
|
}
|
||||||
|
|
||||||
Motion_Initialize();
|
Motion_Initialize();
|
||||||
|
|||||||
@@ -1601,34 +1601,30 @@ void ObjectMgr::ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFl
|
|||||||
{
|
{
|
||||||
#define ChooseCreatureFlagSource(field) ((data && data->field.has_value()) ? *data->field : cInfo->field)
|
#define ChooseCreatureFlagSource(field) ((data && data->field.has_value()) ? *data->field : cInfo->field)
|
||||||
|
|
||||||
if (data)
|
if (npcFlags)
|
||||||
|
*npcFlags = ChooseCreatureFlagSource(npcflag);
|
||||||
|
|
||||||
|
if (unitFlags)
|
||||||
{
|
{
|
||||||
if (npcFlags)
|
*unitFlags = ChooseCreatureFlagSource(unit_flags);
|
||||||
*npcFlags = ChooseCreatureFlagSource(npcflag);
|
|
||||||
|
|
||||||
if (unitFlags)
|
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_CAN_SWIM))
|
||||||
{
|
*unitFlags |= UNIT_FLAG_CAN_SWIM;
|
||||||
*unitFlags = ChooseCreatureFlagSource(unit_flags);
|
|
||||||
|
|
||||||
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_CAN_SWIM))
|
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_SWIM))
|
||||||
*unitFlags |= UNIT_FLAG_CAN_SWIM;
|
*unitFlags |= UNIT_FLAG_CANT_SWIM;
|
||||||
|
|
||||||
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_SWIM))
|
|
||||||
*unitFlags |= UNIT_FLAG_CANT_SWIM;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unitFlags2)
|
|
||||||
{
|
|
||||||
*unitFlags2 = ChooseCreatureFlagSource(unit_flags2);
|
|
||||||
|
|
||||||
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_TURN))
|
|
||||||
*unitFlags2 |= UNIT_FLAG2_CANNOT_TURN;
|
|
||||||
|
|
||||||
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_4_PREVENT_SWIM))
|
|
||||||
*unitFlags2 |= UNIT_FLAG2_AI_WILL_ONLY_SWIM_IF_TARGET_SWIMS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unitFlags2)
|
||||||
|
{
|
||||||
|
*unitFlags2 = ChooseCreatureFlagSource(unit_flags2);
|
||||||
|
|
||||||
|
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_3_CANNOT_TURN))
|
||||||
|
*unitFlags2 |= UNIT_FLAG2_CANNOT_TURN;
|
||||||
|
|
||||||
|
if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_4_PREVENT_SWIM))
|
||||||
|
*unitFlags2 |= UNIT_FLAG2_AI_WILL_ONLY_SWIM_IF_TARGET_SWIMS;
|
||||||
|
}
|
||||||
|
|
||||||
#undef ChooseCreatureFlagSource
|
#undef ChooseCreatureFlagSource
|
||||||
}
|
}
|
||||||
@@ -2094,7 +2090,7 @@ void ObjectMgr::LoadCreatures()
|
|||||||
CreatureData& data = _creatureDataStore[guid];
|
CreatureData& data = _creatureDataStore[guid];
|
||||||
data.spawnId = guid;
|
data.spawnId = guid;
|
||||||
data.id = entry;
|
data.id = entry;
|
||||||
data.mapId = fields[2].GetUInt16();
|
data.mapId = fields[2].GetUInt16();
|
||||||
data.spawnPoint.Relocate(fields[3].GetFloat(), fields[4].GetFloat(), fields[5].GetFloat(), fields[6].GetFloat());
|
data.spawnPoint.Relocate(fields[3].GetFloat(), fields[4].GetFloat(), fields[5].GetFloat(), fields[6].GetFloat());
|
||||||
data.displayid = fields[7].GetUInt32();
|
data.displayid = fields[7].GetUInt32();
|
||||||
data.equipmentId = fields[8].GetInt8();
|
data.equipmentId = fields[8].GetInt8();
|
||||||
@@ -2108,7 +2104,7 @@ void ObjectMgr::LoadCreatures()
|
|||||||
int16 gameEvent = fields[16].GetInt8();
|
int16 gameEvent = fields[16].GetInt8();
|
||||||
data.poolId = fields[17].GetUInt32();
|
data.poolId = fields[17].GetUInt32();
|
||||||
if (!fields[18].IsNull())
|
if (!fields[18].IsNull())
|
||||||
data.npcflag = fields[18].GetUInt64();
|
data.npcflag = fields[18].GetUInt32();
|
||||||
if (!fields[19].IsNull())
|
if (!fields[19].IsNull())
|
||||||
data.unit_flags = fields[19].GetUInt32();
|
data.unit_flags = fields[19].GetUInt32();
|
||||||
if (!fields[20].IsNull())
|
if (!fields[20].IsNull())
|
||||||
|
|||||||
Reference in new issue
Block a user