Core/Creatures: Drop dynamic flags from creature and creature_template
Port From (https://github.com/TrinityCore/TrinityCore/commit/bb68fd73b498f6d6fc2c4414352c6e073a184304)
This commit is contained in:
@@ -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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||
|
||||
@@ -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) { }
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user