diff --git a/sql/updates/world/4.3.4/2025_06_14_00_world.sql b/sql/updates/world/4.3.4/2025_06_14_00_world.sql new file mode 100644 index 0000000000..4a6696e4d7 --- /dev/null +++ b/sql/updates/world/4.3.4/2025_06_14_00_world.sql @@ -0,0 +1,2 @@ +ALTER TABLE `creature` + CHANGE `npcflag` `npcflag` INT(10) UNSIGNED NULL; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index ca406f001a..16711c959c 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -585,7 +585,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, SetFaction(cInfo->faction); - uint32 npcflags, unitFlags, unitFlags2; + uint32 npcflags = 0, unitFlags = 0, unitFlags2 = 0; ObjectMgr::ChooseCreatureFlags(cInfo, &npcflags, &unitFlags, &unitFlags2, _staticFlags, data); if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT) @@ -1989,10 +1989,10 @@ void Creature::setDeathState(DeathState s) if (!IsPet()) { CreatureData const* creatureData = GetCreatureData(); - CreatureTemplate const* cinfo = GetCreatureTemplate(); + CreatureTemplate const* cInfo = GetCreatureTemplate(); - uint32 npcflag, unitFlags, unitFlags2; - ObjectMgr::ChooseCreatureFlags(cinfo, &npcflag, &unitFlags, &unitFlags2, _staticFlags, creatureData); + uint32 npcflag = 0, unitFlags = 0, unitFlags2 = 0; + ObjectMgr::ChooseCreatureFlags(cInfo, &npcflag, &unitFlags, &unitFlags2, _staticFlags, creatureData); SetUInt32Value(UNIT_NPC_FLAGS, npcflag); SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags); @@ -2001,7 +2001,7 @@ void Creature::setDeathState(DeathState s) RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); - SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool)); + SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool)); } Motion_Initialize(); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 5be48bc6dd..68019c7086 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1601,34 +1601,30 @@ void ObjectMgr::ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFl { #define ChooseCreatureFlagSource(field) ((data && data->field.has_value()) ? *data->field : cInfo->field) - if (data) + if (npcFlags) + *npcFlags = ChooseCreatureFlagSource(npcflag); + + if (unitFlags) { - if (npcFlags) - *npcFlags = ChooseCreatureFlagSource(npcflag); + *unitFlags = ChooseCreatureFlagSource(unit_flags); - if (unitFlags) - { - *unitFlags = ChooseCreatureFlagSource(unit_flags); + if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_CAN_SWIM)) + *unitFlags |= UNIT_FLAG_CAN_SWIM; - if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_CAN_SWIM)) - *unitFlags |= UNIT_FLAG_CAN_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 (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; + } #undef ChooseCreatureFlagSource } @@ -2094,7 +2090,7 @@ void ObjectMgr::LoadCreatures() CreatureData& data = _creatureDataStore[guid]; data.spawnId = guid; 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.displayid = fields[7].GetUInt32(); data.equipmentId = fields[8].GetInt8(); @@ -2108,7 +2104,7 @@ void ObjectMgr::LoadCreatures() int16 gameEvent = fields[16].GetInt8(); data.poolId = fields[17].GetUInt32(); if (!fields[18].IsNull()) - data.npcflag = fields[18].GetUInt64(); + data.npcflag = fields[18].GetUInt32(); if (!fields[19].IsNull()) data.unit_flags = fields[19].GetUInt32(); if (!fields[20].IsNull())