Core/Creatures: Drop dynamic flags from creature and creature_template

Port From (https://github.com/TrinityCore/TrinityCore/commit/bb68fd73b498f6d6fc2c4414352c6e073a184304)
This commit is contained in:
hondacrx
2023-06-24 09:11:35 -04:00
parent 55b91302ec
commit 219db87e6a
4 changed files with 43 additions and 69 deletions
@@ -60,12 +60,12 @@ namespace Framework.Database
PrepareStatement(WorldStatements.SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?");
PrepareStatement(WorldStatements.DEL_CREATURE, "DELETE FROM creature WHERE guid = ?");
PrepareStatement(WorldStatements.SEL_COMMANDS, "SELECT name, help FROM command");
PrepareStatement(WorldStatements.SEL_CREATURE_TEMPLATE, "SELECT entry, KillCredit1, KillCredit2, name, femaleName, subname, TitleAlt, IconName, RequiredExpansion, VignetteID, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, unit_flags3, dynamicflags, family, trainer_class, type, VehicleId, AIName, MovementType, ctm.Ground, ctm.Swim, ctm.Flight, ctm.Rooted, ctm.Chase, ctm.Random, ctm.InteractionPauseTimer, ExperienceModifier, RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName, StringId FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId WHERE entry = ? OR 1 = ?");
PrepareStatement(WorldStatements.SEL_CREATURE_TEMPLATE, "SELECT entry, KillCredit1, KillCredit2, name, femaleName, subname, TitleAlt, IconName, RequiredExpansion, VignetteID, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, unit_flags3, family, trainer_class, type, VehicleId, AIName, MovementType, ctm.Ground, ctm.Swim, ctm.Flight, ctm.Rooted, ctm.Chase, ctm.Random, ctm.InteractionPauseTimer, ExperienceModifier, RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName, StringId FROM creature_template ct LEFT JOIN creature_template_movement ctm ON ct.entry = ctm.CreatureId WHERE entry = ? OR 1 = ?");
PrepareStatement(WorldStatements.SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?");
PrepareStatement(WorldStatements.SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?");
PrepareStatement(WorldStatements.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_");
PrepareStatement(WorldStatements.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_");
PrepareStatement(WorldStatements.INS_CREATURE, "INSERT INTO creature (guid, id , map, spawnDifficulties, PhaseId, PhaseGroup, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, unit_flags2, unit_flags3, dynamicflags) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(WorldStatements.INS_CREATURE, "INSERT INTO creature (guid, id , map, spawnDifficulties, PhaseId, PhaseGroup, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, unit_flags2, unit_flags3) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
PrepareStatement(WorldStatements.DEL_GAME_EVENT_CREATURE, "DELETE FROM game_event_creature WHERE guid = ?");
PrepareStatement(WorldStatements.DEL_GAME_EVENT_MODEL_EQUIP, "DELETE FROM game_event_model_equip WHERE guid = ?");
PrepareStatement(WorldStatements.INS_GAMEOBJECT, "INSERT INTO gameobject (guid, id, map, spawnDifficulties, PhaseId, PhaseGroup, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
+5 -15
View File
@@ -303,9 +303,7 @@ namespace Game.Entities
SetFaction(cInfo.Faction);
ulong npcFlags;
uint unitFlags, unitFlags2, unitFlags3, dynamicFlags;
ObjectManager.ChooseCreatureFlags(cInfo, out npcFlags, out unitFlags, out unitFlags2, out unitFlags3, out dynamicFlags, data);
ObjectManager.ChooseCreatureFlags(cInfo, out ulong npcFlags, out uint unitFlags, out uint unitFlags2, out uint unitFlags3, data);
if (cInfo.FlagsExtra.HasAnyFlag(CreatureFlagsExtra.Worldevent))
npcFlags |= Global.GameEventMgr.GetNPCFlag(this);
@@ -322,7 +320,7 @@ namespace Game.Entities
ReplaceAllUnitFlags2((UnitFlags2)unitFlags2);
ReplaceAllUnitFlags3((UnitFlags3)unitFlags3);
ReplaceAllDynamicFlags((UnitDynFlags)dynamicFlags);
ReplaceAllDynamicFlags(UnitDynFlags.None);
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.StateAnimID), Global.DB2Mgr.GetEmptyAnimStateID());
@@ -1086,7 +1084,7 @@ namespace Game.Entities
ClearUnitState(UnitState.AttackPlayer);
if (IsAlive() && HasDynamicFlag(UnitDynFlags.Tapped))
ReplaceAllDynamicFlags((UnitDynFlags)GetCreatureTemplate().DynamicFlags);
RemoveDynamicFlag(UnitDynFlags.Tapped);
if (IsPet() || IsGuardian()) // update pets' speed for catchup OOC speed
{
@@ -1319,7 +1317,6 @@ namespace Game.Entities
uint unitFlags = m_unitData.Flags;
uint unitFlags2 = m_unitData.Flags2;
uint unitFlags3 = m_unitData.Flags3;
UnitDynFlags dynamicflags = (UnitDynFlags)(uint)m_objectData.DynamicFlags;
// check if it's a custom model and if not, use 0 for displayId
CreatureTemplate cinfo = GetCreatureTemplate();
@@ -1340,9 +1337,6 @@ namespace Game.Entities
if (unitFlags3 == cinfo.UnitFlags3)
unitFlags3 = 0;
if (dynamicflags == (UnitDynFlags)cinfo.DynamicFlags)
dynamicflags = 0;
}
if (data.SpawnId == 0)
@@ -1378,7 +1372,6 @@ namespace Game.Entities
data.unit_flags = unitFlags;
data.unit_flags2 = unitFlags2;
data.unit_flags3 = unitFlags3;
data.dynamicflags = (uint)dynamicflags;
if (data.spawnGroupData == null)
data.spawnGroupData = Global.ObjectMgr.GetDefaultSpawnGroup();
@@ -1417,7 +1410,6 @@ namespace Game.Entities
stmt.AddValue(index++, unitFlags);
stmt.AddValue(index++, unitFlags2);
stmt.AddValue(index++, unitFlags3);
stmt.AddValue(index++, (uint)dynamicflags);
trans.Append(stmt);
DB.World.CommitTransaction(trans);
@@ -1991,9 +1983,7 @@ namespace Game.Entities
CreatureData creatureData = GetCreatureData();
CreatureTemplate cInfo = GetCreatureTemplate();
ulong npcFlags;
uint unitFlags, unitFlags2, unitFlags3, dynamicFlags;
ObjectManager.ChooseCreatureFlags(cInfo, out npcFlags, out unitFlags, out unitFlags2, out unitFlags3, out dynamicFlags, creatureData);
ObjectManager.ChooseCreatureFlags(cInfo, out ulong npcFlags, out uint unitFlags, out uint unitFlags2, out uint unitFlags3, creatureData);
if (cInfo.FlagsExtra.HasAnyFlag(CreatureFlagsExtra.Worldevent))
npcFlags |= Global.GameEventMgr.GetNPCFlag(this);
@@ -2004,7 +1994,7 @@ namespace Game.Entities
ReplaceAllUnitFlags((UnitFlags)unitFlags);
ReplaceAllUnitFlags2((UnitFlags2)unitFlags2);
ReplaceAllUnitFlags3((UnitFlags3)unitFlags3);
ReplaceAllDynamicFlags((UnitDynFlags)dynamicFlags);
ReplaceAllDynamicFlags(UnitDynFlags.None);
RemoveUnitFlag(UnitFlags.InCombat);
@@ -40,7 +40,6 @@ namespace Game.Entities
public UnitFlags UnitFlags;
public uint UnitFlags2;
public uint UnitFlags3;
public uint DynamicFlags;
public CreatureFamily Family;
public Class TrainerClass;
public CreatureType CreatureType;
@@ -271,7 +270,6 @@ namespace Game.Entities
public uint unit_flags; // enum UnitFlags mask values
public uint unit_flags2; // enum UnitFlags2 mask values
public uint unit_flags3; // enum UnitFlags3 mask values
public uint dynamicflags;
public CreatureData() : base(SpawnObjectType.Creature) { }
}
+36 -50
View File
@@ -103,13 +103,12 @@ namespace Game
return cinfo.GetFirstInvisibleModel();
}
public static void ChooseCreatureFlags(CreatureTemplate cInfo, out ulong npcFlag, out uint unitFlags, out uint unitFlags2, out uint unitFlags3, out uint dynamicFlags, CreatureData data = null)
public static void ChooseCreatureFlags(CreatureTemplate cInfo, out ulong npcFlag, out uint unitFlags, out uint unitFlags2, out uint unitFlags3, CreatureData data = null)
{
npcFlag = data != null && data.npcflag != 0 ? data.npcflag : cInfo.Npcflag;
unitFlags = data != null && data.unit_flags != 0 ? data.unit_flags : (uint)cInfo.UnitFlags;
unitFlags2 = data != null && data.unit_flags2 != 0 ? data.unit_flags2 : cInfo.UnitFlags2;
unitFlags3 = data != null && data.unit_flags3 != 0 ? data.unit_flags3 : cInfo.UnitFlags3;
dynamicFlags = data != null && data.dynamicflags != 0 ? data.dynamicflags : cInfo.DynamicFlags;
}
public static ResponseCodes CheckPlayerName(string name, Locale locale, bool create = false)
@@ -1794,10 +1793,9 @@ namespace Game
creature.UnitFlags = (UnitFlags)fields.Read<uint>(22);
creature.UnitFlags2 = fields.Read<uint>(23);
creature.UnitFlags3 = fields.Read<uint>(24);
creature.DynamicFlags = fields.Read<uint>(25);
creature.Family = (CreatureFamily)fields.Read<uint>(26);
creature.TrainerClass = (Class)fields.Read<byte>(27);
creature.CreatureType = (CreatureType)fields.Read<byte>(28);
creature.Family = (CreatureFamily)fields.Read<uint>(25);
creature.TrainerClass = (Class)fields.Read<byte>(26);
creature.CreatureType = (CreatureType)fields.Read<byte>(27);
for (var i = (int)SpellSchools.Holy; i < (int)SpellSchools.Max; ++i)
creature.Resistance[i] = 0;
@@ -1805,42 +1803,42 @@ namespace Game
for (var i = 0; i < SharedConst.MaxCreatureSpells; ++i)
creature.Spells[i] = 0;
creature.VehicleId = fields.Read<uint>(29);
creature.AIName = fields.Read<string>(30);
creature.MovementType = fields.Read<uint>(31);
creature.VehicleId = fields.Read<uint>(28);
creature.AIName = fields.Read<string>(29);
creature.MovementType = fields.Read<uint>(30);
if (!fields.IsNull(31))
creature.Movement.Ground = (CreatureGroundMovementType)fields.Read<byte>(31);
if (!fields.IsNull(32))
creature.Movement.Ground = (CreatureGroundMovementType)fields.Read<byte>(32);
creature.Movement.Swim = fields.Read<bool>(32);
if (!fields.IsNull(33))
creature.Movement.Swim = fields.Read<bool>(33);
creature.Movement.Flight = (CreatureFlightMovementType)fields.Read<byte>(33);
if (!fields.IsNull(34))
creature.Movement.Flight = (CreatureFlightMovementType)fields.Read<byte>(34);
creature.Movement.Rooted = fields.Read<bool>(34);
if (!fields.IsNull(35))
creature.Movement.Rooted = fields.Read<bool>(35);
creature.Movement.Chase = (CreatureChaseMovementType)fields.Read<byte>(35);
if (!fields.IsNull(36))
creature.Movement.Chase = (CreatureChaseMovementType)fields.Read<byte>(36);
creature.Movement.Random = (CreatureRandomMovementType)fields.Read<byte>(36);
if (!fields.IsNull(37))
creature.Movement.Random = (CreatureRandomMovementType)fields.Read<byte>(37);
creature.Movement.InteractionPauseTimer = fields.Read<uint>(37);
if (!fields.IsNull(38))
creature.Movement.InteractionPauseTimer = fields.Read<uint>(38);
creature.ModExperience = fields.Read<float>(39);
creature.RacialLeader = fields.Read<bool>(40);
creature.MovementId = fields.Read<uint>(41);
creature.WidgetSetID = fields.Read<int>(42);
creature.WidgetSetUnitConditionID = fields.Read<int>(43);
creature.RegenHealth = fields.Read<bool>(44);
creature.MechanicImmuneMask = fields.Read<ulong>(45);
creature.SpellSchoolImmuneMask = fields.Read<uint>(46);
creature.FlagsExtra = (CreatureFlagsExtra)fields.Read<uint>(47);
creature.ScriptID = GetScriptId(fields.Read<string>(48));
creature.StringId = fields.Read<string>(49);
creature.ModExperience = fields.Read<float>(38);
creature.RacialLeader = fields.Read<bool>(39);
creature.MovementId = fields.Read<uint>(40);
creature.WidgetSetID = fields.Read<int>(41);
creature.WidgetSetUnitConditionID = fields.Read<int>(42);
creature.RegenHealth = fields.Read<bool>(43);
creature.MechanicImmuneMask = fields.Read<ulong>(44);
creature.SpellSchoolImmuneMask = fields.Read<uint>(45);
creature.FlagsExtra = (CreatureFlagsExtra)fields.Read<uint>(46);
creature.ScriptID = GetScriptId(fields.Read<string>(47));
creature.StringId = fields.Read<string>(48);
creatureTemplateStorage[entry] = creature;
}
@@ -2870,12 +2868,6 @@ namespace Game
cInfo.UnitFlags3 &= (uint)UnitFlags3.Allowed;
}
if (cInfo.DynamicFlags != 0)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with `dynamicflags` > 0. Ignored and set to 0.");
cInfo.DynamicFlags = 0;
}
if (!cInfo.GossipMenuIds.Empty() && !cInfo.Npcflag.HasAnyFlag((uint)NPCFlags.Gossip))
Log.outInfo(LogFilter.Sql, $"Creature (Entry: {cInfo.Entry}) has assigned gossip menu, but npcflag does not include UNIT_NPC_FLAG_GOSSIP.");
else if (cInfo.GossipMenuIds.Empty() && cInfo.Npcflag.HasAnyFlag((uint)NPCFlags.Gossip))
@@ -3433,8 +3425,8 @@ namespace Game
SQLResult result = DB.World.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
"currentwaypoint, curhealth, curmana, MovementType, spawnDifficulties, eventEntry, poolSpawnId, creature.npcflag, creature.unit_flags, creature.unit_flags2, creature.unit_flags3, " +
// 22 23 24 25 26 27 28
"creature.dynamicflags, creature.phaseUseFlags, creature.phaseid, creature.phasegroup, creature.terrainSwapMap, creature.ScriptName, creature.StringId " +
//22 23 24 25 26 27
"creature.phaseUseFlags, creature.phaseid, creature.phasegroup, creature.terrainSwapMap, creature.ScriptName, creature.StringId " +
"FROM creature LEFT OUTER JOIN game_event_creature ON creature.guid = game_event_creature.guid LEFT OUTER JOIN pool_members ON pool_members.type = 0 AND creature.guid = pool_members.spawnId");
if (result.IsEmpty())
@@ -3491,13 +3483,13 @@ namespace Game
data.unit_flags = result.Read<uint>(19);
data.unit_flags2 = result.Read<uint>(20);
data.unit_flags3 = result.Read<uint>(21);
data.dynamicflags = result.Read<uint>(22);
data.PhaseUseFlags = (PhaseUseFlagsValues)result.Read<byte>(23);
data.PhaseId = result.Read<uint>(24);
data.PhaseGroup = result.Read<uint>(25);
data.terrainSwapMap = result.Read<int>(26);
data.ScriptId = GetScriptId(result.Read<string>(27));
data.StringId = result.Read<string>(28);
data.PhaseUseFlags = (PhaseUseFlagsValues)result.Read<byte>(22);
data.PhaseId = result.Read<uint>(23);
data.PhaseGroup = result.Read<uint>(24);
data.terrainSwapMap = result.Read<int>(25);
data.ScriptId = GetScriptId(result.Read<string>(26));
data.StringId = result.Read<string>(27);
data.spawnGroupData = _spawnGroupDataStorage[IsTransportMap(data.MapId) ? 1 : 0u]; // transport spawns default to compatibility group
var mapEntry = CliDB.MapStorage.LookupByKey(data.MapId);
@@ -3625,12 +3617,6 @@ namespace Game
cInfo.UnitFlags3 &= (uint)UnitFlags3.Allowed;
}
if (cInfo.DynamicFlags != 0)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with `dynamicflags` > 0. Ignored and set to 0.");
cInfo.DynamicFlags = 0;
}
if (WorldConfig.GetBoolValue(WorldCfg.CalculateCreatureZoneAreaData))
{
PhasingHandler.InitDbVisibleMapId(phaseShift, data.terrainSwapMap);