From d0c902ce1feec6c3bbfdfbe5990512b966959516 Mon Sep 17 00:00:00 2001 From: Meji Date: Tue, 11 Mar 2025 21:29:30 +0100 Subject: [PATCH] Core/Creatures: Drop dynamic flags from creature and creature_template --- .../world/4.3.4/2025_03_11_03_world.sql | 5 + .../Database/Implementation/WorldDatabase.cpp | 4 +- .../game/Entities/Creature/Creature.cpp | 24 ++-- .../game/Entities/Creature/CreatureData.h | 2 - src/server/game/Globals/ObjectMgr.cpp | 114 ++++++++---------- src/server/game/Globals/ObjectMgr.h | 2 +- 6 files changed, 73 insertions(+), 78 deletions(-) create mode 100644 sql/updates/world/4.3.4/2025_03_11_03_world.sql diff --git a/sql/updates/world/4.3.4/2025_03_11_03_world.sql b/sql/updates/world/4.3.4/2025_03_11_03_world.sql new file mode 100644 index 0000000000..31ce20f3f9 --- /dev/null +++ b/sql/updates/world/4.3.4/2025_03_11_03_world.sql @@ -0,0 +1,5 @@ +ALTER TABLE `creature_template` + DROP COLUMN `dynamicflags`; + +ALTER TABLE `creature` + DROP COLUMN `dynamicflags`; diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp index 918eb8296a..19c05152fd 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.cpp +++ b/src/server/database/Database/Implementation/WorldDatabase.cpp @@ -76,12 +76,12 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, permission, help FROM command", CONNECTION_SYNCH); - PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_class, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, ctm.HoverInitiallyEnabled, ctm.Random, ctm.InteractionPauseTimer, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, StaticFlags, StaticFlags2, StaticFlags3, StaticFlags4, StaticFlags5, ScriptName FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId WHERE entry = ?", CONNECTION_SYNCH); + PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, family, trainer_class, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, ctm.HoverInitiallyEnabled, ctm.Random, ctm.InteractionPauseTimer, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, StaticFlags, StaticFlags2, StaticFlags3, StaticFlags4, StaticFlags5, ScriptName FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId WHERE entry = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_GAMEOBJECT_NEAREST, "SELECT guid, id, position_x, position_y, position_z, map, (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) AS order_ FROM gameobject WHERE map = ? AND (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) <= ? ORDER BY order_", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_CREATURE_NEAREST, "SELECT guid, id, position_x, position_y, position_z, map, (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) AS order_ FROM creature WHERE map = ? AND (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) <= ? ORDER BY order_", CONNECTION_SYNCH); - PrepareStatement(WORLD_INS_CREATURE, "INSERT INTO creature (guid, id , map, spawnMask, PhaseId, PhaseGroup, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(WORLD_INS_CREATURE, "INSERT INTO creature (guid, id , map, spawnMask, PhaseId, PhaseGroup, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, unit_flags2) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_DEL_GAME_EVENT_CREATURE, "DELETE FROM game_event_creature WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_DEL_GAME_EVENT_MODEL_EQUIP, "DELETE FROM game_event_model_equip WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_INS_GAMEOBJECT, "INSERT INTO gameobject (guid, id, map, spawnMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 3a41d0e74e..f0962ff78e 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -582,8 +582,8 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, SetFaction(cInfo->faction); - uint32 npcflags, unitFlags, unitFlags2, dynamicFlags; - ObjectMgr::ChooseCreatureFlags(cInfo, &npcflags, &unitFlags, &unitFlags2, &dynamicFlags, _staticFlags, data); + uint32 npcflags, unitFlags, unitFlags2; + ObjectMgr::ChooseCreatureFlags(cInfo, &npcflags, &unitFlags, &unitFlags2, _staticFlags, data); if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT) npcflags |= sGameEventMgr->GetNPCFlag(this); @@ -598,7 +598,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags); SetUInt32Value(UNIT_FIELD_FLAGS_2, unitFlags2); - SetUInt32Value(UNIT_DYNAMIC_FLAGS, dynamicFlags); + SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); SetCanDualWield(cInfo->flags_extra & CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK); @@ -1307,7 +1307,7 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask) uint32 displayId = GetNativeDisplayId(); uint32 npcflag = GetUInt32Value(UNIT_NPC_FLAGS); uint32 unit_flags = GetUInt32Value(UNIT_FIELD_FLAGS); - uint32 dynamicflags = GetUInt32Value(UNIT_DYNAMIC_FLAGS); + uint32 unit_flags2 = GetUInt32Value(UNIT_FIELD_FLAGS_2); // check if it's a custom model and if not, use 0 for displayId CreatureTemplate const* cinfo = GetCreatureTemplate(); @@ -1323,8 +1323,8 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask) if (unit_flags == cinfo->unit_flags) unit_flags = 0; - if (dynamicflags == cinfo->dynamicflags) - dynamicflags = 0; + if (unit_flags2 == cinfo->unit_flags2) + unit_flags2 = 0; } if (!data.spawnId) @@ -1355,7 +1355,7 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask) data.spawnMask = spawnMask; data.npcflag = npcflag; data.unit_flags = unit_flags; - data.dynamicflags = dynamicflags; + data.unit_flags2 = unit_flags2; if (!data.spawnGroupData) data.spawnGroupData = sObjectMgr->GetDefaultSpawnGroup(); @@ -1393,7 +1393,7 @@ void Creature::SaveToDB(uint32 mapid, uint8 spawnMask) stmt->setUInt8(index++, uint8(GetDefaultMovementType())); stmt->setUInt32(index++, npcflag); stmt->setUInt32(index++, unit_flags); - stmt->setUInt32(index++, dynamicflags); + stmt->setUInt32(index++, unit_flags2); trans->Append(stmt); WorldDatabase.CommitTransaction(trans); @@ -1991,13 +1991,13 @@ void Creature::setDeathState(DeathState s) CreatureData const* creatureData = GetCreatureData(); CreatureTemplate const* cinfo = GetCreatureTemplate(); - uint32 npcflag, unitFlags, unitFlags2, dynamicFlags; - ObjectMgr::ChooseCreatureFlags(cinfo, &npcflag, &unitFlags, &unitFlags2, &dynamicFlags, _staticFlags, creatureData); + uint32 npcflag, unitFlags, unitFlags2; + ObjectMgr::ChooseCreatureFlags(cinfo, &npcflag, &unitFlags, &unitFlags2, _staticFlags, creatureData); SetUInt32Value(UNIT_NPC_FLAGS, npcflag); SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags); SetUInt32Value(UNIT_FIELD_FLAGS_2, unitFlags2); - SetUInt32Value(UNIT_DYNAMIC_FLAGS, dynamicFlags); + SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); @@ -3265,7 +3265,7 @@ void Creature::AtDisengage() ClearUnitState(UNIT_STATE_ATTACK_PLAYER); if (IsAlive() && HasFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) - SetUInt32Value(UNIT_DYNAMIC_FLAGS, GetCreatureTemplate()->dynamicflags); + RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED); } void Creature::ForcePartyMembersIntoCombat() diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 5aacc95a35..11b54a66f5 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -381,7 +381,6 @@ struct TC_GAME_API CreatureTemplate uint32 unit_class; // enum Classes. Note only 4 classes are known for creatures. uint32 unit_flags; // enum UnitFlags mask values uint32 unit_flags2; // enum UnitFlags2 mask values - uint32 dynamicflags; CreatureFamily family; // enum CreatureFamily values (optional) uint32 trainer_class; uint32 type; // enum CreatureType values @@ -511,7 +510,6 @@ struct CreatureData : public SpawnData uint32 curhealth = 0; uint32 curmana = 0; uint8 movementType = 0; - Optional dynamicflags; Optional npcflag; Optional unit_flags; // enum UnitFlags mask values Optional unit_flags2; // enum UnitFlags2 mask values diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 1480fe621b..5bd680c529 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -429,15 +429,15 @@ void ObjectMgr::LoadCreatureTemplates() "modelid4, name, femaleName, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, exp_unk, faction, npcflag, speed_walk, speed_run, " // 23 24 25 26 27 28 29 30 31 32 "scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, " - // 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 - "dynamicflags, family, trainer_class, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, " - // 48 49 50 51 52 53 54 55 56 57 58 59 60 61 + // 33 34 35 36 37 38 39 40 41 42 43 44 45 46 + "family, trainer_class, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, " + // 47 48 49 50 51 52 53 54 55 56 57 58 59 60 "spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, " - // 62 63 64 65 66 67 68 69 + // 61 62 63 64 65 66 67 68 "ctm.HoverInitiallyEnabled, ctm.Random, ctm.InteractionPauseTimer, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, " - // 70 71 72 73 74 75 76 77 + // 69 70 71 72 73 74 75 76 "ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, " - // 78 79 80 81 82 83 84 + // 77 78 79 80 81 82 83 "flags_extra, StaticFlags, StaticFlags2, StaticFlags3, StaticFlags4, StaticFlags5, ScriptName FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId"); if (!result) @@ -505,55 +505,54 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) creatureTemplate.unit_class = uint32(fields[30].GetUInt8()); creatureTemplate.unit_flags = fields[31].GetUInt32(); creatureTemplate.unit_flags2 = fields[32].GetUInt32(); - creatureTemplate.dynamicflags = fields[33].GetUInt32(); - creatureTemplate.family = CreatureFamily(uint32(fields[34].GetUInt8())); - creatureTemplate.trainer_class = fields[35].GetUInt32(); - creatureTemplate.type = uint32(fields[36].GetUInt8()); - creatureTemplate.type_flags = fields[37].GetUInt32(); - creatureTemplate.type_flags2 = fields[38].GetUInt32(); - creatureTemplate.lootid = fields[39].GetUInt32(); - creatureTemplate.pickpocketLootId = fields[40].GetUInt32(); - creatureTemplate.SkinLootId = fields[41].GetUInt32(); + creatureTemplate.family = CreatureFamily(uint32(fields[33].GetUInt8())); + creatureTemplate.trainer_class = fields[34].GetUInt32(); + creatureTemplate.type = uint32(fields[35].GetUInt8()); + creatureTemplate.type_flags = fields[36].GetUInt32(); + creatureTemplate.type_flags2 = fields[37].GetUInt32(); + creatureTemplate.lootid = fields[38].GetUInt32(); + creatureTemplate.pickpocketLootId = fields[39].GetUInt32(); + creatureTemplate.SkinLootId = fields[40].GetUInt32(); for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - creatureTemplate.resistance[i] = fields[42 + i - 1].GetInt16(); + creatureTemplate.resistance[i] = fields[41 + i - 1].GetInt16(); for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i) - creatureTemplate.spells[i] = fields[48 + i].GetUInt32(); + creatureTemplate.spells[i] = fields[47 + i].GetUInt32(); + + creatureTemplate.PetSpellDataId = fields[55].GetUInt32(); + creatureTemplate.VehicleId = fields[56].GetUInt32(); + creatureTemplate.mingold = fields[57].GetUInt32(); + creatureTemplate.maxgold = fields[58].GetUInt32(); + creatureTemplate.AIName = fields[59].GetString(); + creatureTemplate.MovementType = uint32(fields[60].GetUInt8()); + if (!fields[61].IsNull()) + creatureTemplate.Movement.HoverInitiallyEnabled = fields[61].GetBool(); - creatureTemplate.PetSpellDataId = fields[56].GetUInt32(); - creatureTemplate.VehicleId = fields[57].GetUInt32(); - creatureTemplate.mingold = fields[58].GetUInt32(); - creatureTemplate.maxgold = fields[59].GetUInt32(); - creatureTemplate.AIName = fields[60].GetString(); - creatureTemplate.MovementType = uint32(fields[61].GetUInt8()); if (!fields[62].IsNull()) - creatureTemplate.Movement.HoverInitiallyEnabled = fields[62].GetBool(); + creatureTemplate.Movement.Random = static_cast(fields[62].GetUInt8()); if (!fields[63].IsNull()) - creatureTemplate.Movement.Random = static_cast(fields[63].GetUInt8()); + creatureTemplate.Movement.InteractionPauseTimer = fields[63].GetUInt32(); - if (!fields[64].IsNull()) - creatureTemplate.Movement.InteractionPauseTimer = fields[64].GetUInt32(); + creatureTemplate.HoverHeight = fields[64].GetFloat(); + creatureTemplate.ModHealth = fields[65].GetFloat(); + creatureTemplate.ModHealthExtra = fields[66].GetFloat(); + creatureTemplate.ModMana = fields[67].GetFloat(); + creatureTemplate.ModManaExtra = fields[68].GetFloat(); + creatureTemplate.ModArmor = fields[69].GetFloat(); + creatureTemplate.ModDamage = fields[70].GetFloat(); + creatureTemplate.ModExperience = fields[71].GetFloat(); - creatureTemplate.HoverHeight = fields[65].GetFloat(); - creatureTemplate.ModHealth = fields[66].GetFloat(); - creatureTemplate.ModHealthExtra = fields[67].GetFloat(); - creatureTemplate.ModMana = fields[68].GetFloat(); - creatureTemplate.ModManaExtra = fields[69].GetFloat(); - creatureTemplate.ModArmor = fields[70].GetFloat(); - creatureTemplate.ModDamage = fields[71].GetFloat(); - creatureTemplate.ModExperience = fields[72].GetFloat(); - - creatureTemplate.RacialLeader = fields[73].GetBool(); - creatureTemplate.movementId = fields[74].GetUInt32(); - creatureTemplate.RegenHealth = fields[75].GetBool(); - creatureTemplate.MechanicImmuneMask = fields[76].GetUInt32(); - creatureTemplate.SpellSchoolImmuneMask = fields[77].GetUInt32(); - creatureTemplate.flags_extra = fields[78].GetUInt32(); - creatureTemplate.StaticFlags = CreatureStaticFlagsHolder(CreatureStaticFlags(fields[79].GetUInt32()), CreatureStaticFlags2(fields[80].GetUInt32()), - CreatureStaticFlags3(fields[81].GetUInt32()), CreatureStaticFlags4(fields[82].GetUInt32()), CreatureStaticFlags5(fields[83].GetUInt32())); - creatureTemplate.ScriptID = GetScriptId(fields[84].GetCString()); + creatureTemplate.RacialLeader = fields[72].GetBool(); + creatureTemplate.movementId = fields[73].GetUInt32(); + creatureTemplate.RegenHealth = fields[74].GetBool(); + creatureTemplate.MechanicImmuneMask = fields[75].GetUInt32(); + creatureTemplate.SpellSchoolImmuneMask = fields[76].GetUInt32(); + creatureTemplate.flags_extra = fields[77].GetUInt32(); + creatureTemplate.StaticFlags = CreatureStaticFlagsHolder(CreatureStaticFlags(fields[78].GetUInt32()), CreatureStaticFlags2(fields[79].GetUInt32()), + CreatureStaticFlags3(fields[80].GetUInt32()), CreatureStaticFlags4(fields[81].GetUInt32()), CreatureStaticFlags5(fields[82].GetUInt32())); + creatureTemplate.ScriptID = GetScriptId(fields[83].GetCString()); } void ObjectMgr::LoadCreatureTemplateModels() @@ -1597,7 +1596,7 @@ CreatureModel const* ObjectMgr::ChooseDisplayId(CreatureTemplate const* cinfo, C return cinfo->GetFirstInvisibleModel(); } -void ObjectMgr::ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFlags, uint32* unitFlags, uint32* unitFlags2, uint32* dynamicFlags, CreatureStaticFlagsHolder const& staticFlags, CreatureData const* data /*= nullptr*/) +void ObjectMgr::ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFlags, uint32* unitFlags, uint32* unitFlags2, CreatureStaticFlagsHolder const& staticFlags, CreatureData const* data /*= nullptr*/) { #define ChooseCreatureFlagSource(field) ((data && data->field.has_value()) ? *data->field : cInfo->field) @@ -1627,11 +1626,6 @@ void ObjectMgr::ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFl if (staticFlags.HasFlag(CREATURE_STATIC_FLAG_4_PREVENT_SWIM)) *unitFlags2 |= UNIT_FLAG2_AI_WILL_ONLY_SWIM_IF_TARGET_SWIMS; } - - if (dynamicFlags) - { - *dynamicFlags = ChooseCreatureFlagSource(dynamicflags); - } } @@ -2056,9 +2050,9 @@ void ObjectMgr::LoadCreatures() // 0 1 2 3 4 5 6 7 8 9 10 QueryResult result = WorldDatabase.Query("SELECT creature.guid, id, map, position_x, position_y, position_z, orientation, modelid, equipment_id, spawntimesecs, wander_distance, " - // 11 12 13 14 15 16 17 18 19 20 21 22 - "currentwaypoint, curhealth, curmana, MovementType, spawnMask, eventEntry, poolSpawnId, creature.npcflag, creature.unit_flags, creature.unit_flags2, creature.dynamicflags, creature.phaseUseFlags, " - // 23 24 25 26 + // 11 12 13 14 15 16 17 18 19 20 21 + "currentwaypoint, curhealth, curmana, MovementType, spawnMask, eventEntry, poolSpawnId, creature.npcflag, creature.unit_flags, creature.unit_flags2, creature.phaseUseFlags, " + // 22 23 24 25 "creature.PhaseId, creature.PhaseGroup, creature.terrainSwapMap, creature.ScriptName " "FROM creature " "LEFT OUTER JOIN game_event_creature ON creature.guid = game_event_creature.guid " @@ -2118,13 +2112,11 @@ void ObjectMgr::LoadCreatures() data.unit_flags = fields[19].GetUInt32(); if (!fields[20].IsNull()) data.unit_flags2 = fields[20].GetUInt32(); - if (!fields[21].IsNull()) - data.dynamicflags = fields[21].GetUInt32(); - data.phaseUseFlags = fields[22].GetUInt8(); - data.phaseId = fields[23].GetUInt32(); - data.phaseGroup = fields[24].GetUInt32(); - data.terrainSwapMap = fields[25].GetInt32(); - data.scriptId = GetScriptId(fields[26].GetString()); + data.phaseUseFlags = fields[21].GetUInt8(); + data.phaseId = fields[22].GetUInt32(); + data.phaseGroup = fields[23].GetUInt32(); + data.terrainSwapMap = fields[24].GetInt32(); + data.scriptId = GetScriptId(fields[25].GetString()); data.spawnGroupData = GetDefaultSpawnGroup(); MapEntry const* mapEntry = sMapStore.LookupEntry(data.mapId); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index c5a279be54..3fa21dc346 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1014,7 +1014,7 @@ class TC_GAME_API ObjectMgr CreatureModelInfo const* GetCreatureModelInfo(uint32 modelId) const; CreatureModelInfo const* GetCreatureModelRandomGender(CreatureModel* model, CreatureTemplate const* creatureTemplate) const; static CreatureModel const* ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data = nullptr); - static void ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFlags, uint32* unitFlags, uint32* unitFlags2, uint32* dynamicFlags, CreatureStaticFlagsHolder const& staticFlags, CreatureData const* data /*= nullptr*/); + static void ChooseCreatureFlags(CreatureTemplate const* cInfo, uint32* npcFlags, uint32* unitFlags, uint32* unitFlags2, CreatureStaticFlagsHolder const& staticFlags, CreatureData const* data /*= nullptr*/); EquipmentInfo const* GetEquipmentInfo(uint32 entry, int8& id) const; CreatureAddon const* GetCreatureAddon(ObjectGuid::LowType lowguid) const; GameObjectAddon const* GetGameObjectAddon(ObjectGuid::LowType lowguid) const;