Core/Creature: implement overriding creature static flags based on spawnId and difficultyId

Port From (https://github.com/TrinityCore/TrinityCore/commit/b5ce4a66df0c76583c662056e46619c8fe98f297)
This commit is contained in:
Hondacrx
2024-08-19 12:08:42 -04:00
parent c1e0da92f9
commit 5f616b95f5
4 changed files with 129 additions and 1 deletions
@@ -130,6 +130,18 @@ namespace Game.Entities
_flags8 = (CreatureStaticFlags8)flags8;
}
public CreatureStaticFlagsHolder(CreatureStaticFlags flags, CreatureStaticFlags2 flags2, CreatureStaticFlags3 flags3, CreatureStaticFlags4 flags4, CreatureStaticFlags5 flags5, CreatureStaticFlags6 flags6, CreatureStaticFlags7 flags7, CreatureStaticFlags8 flags8)
{
_flags = flags;
_flags2 = flags2;
_flags3 = flags3;
_flags4 = flags4;
_flags5 = flags5;
_flags6 = flags6;
_flags7 = flags7;
_flags8 = flags8;
}
public bool HasFlag(CreatureStaticFlags flag) { return _flags.HasFlag(flag); }
public bool HasFlag(CreatureStaticFlags2 flag) { return _flags2.HasFlag(flag); }
public bool HasFlag(CreatureStaticFlags3 flag) { return _flags3.HasFlag(flag); }
@@ -147,5 +159,27 @@ namespace Game.Entities
public void ApplyFlag(CreatureStaticFlags6 flag, bool apply) { if (apply) _flags6 |= flag; else _flags6 &= ~flag; }
public void ApplyFlag(CreatureStaticFlags7 flag, bool apply) { if (apply) _flags7 |= flag; else _flags7 &= ~flag; }
public void ApplyFlag(CreatureStaticFlags8 flag, bool apply) { if (apply) _flags8 |= flag; else _flags8 &= ~flag; }
public CreatureStaticFlags GetFlags() { return _flags; }
public CreatureStaticFlags2 GetFlags2() { return _flags2; }
public CreatureStaticFlags3 GetFlags3() { return _flags3; }
public CreatureStaticFlags4 GetFlags4() { return _flags4; }
public CreatureStaticFlags5 GetFlags5() { return _flags5; }
public CreatureStaticFlags6 GetFlags6() { return _flags6; }
public CreatureStaticFlags7 GetFlags7() { return _flags7; }
public CreatureStaticFlags8 GetFlags8() { return _flags8; }
}
// `creature_static_flags_override` table
public class CreatureStaticFlagsOverride
{
public CreatureStaticFlags? StaticFlags1;
public CreatureStaticFlags2? StaticFlags2;
public CreatureStaticFlags3? StaticFlags3;
public CreatureStaticFlags4? StaticFlags4;
public CreatureStaticFlags5? StaticFlags5;
public CreatureStaticFlags6? StaticFlags6;
public CreatureStaticFlags7? StaticFlags7;
public CreatureStaticFlags8? StaticFlags8;
}
}
+26 -1
View File
@@ -280,7 +280,8 @@ namespace Game.Entities
for (byte i = 0; i < SharedConst.MaxCreatureSpells; ++i)
m_spells[i] = GetCreatureTemplate().Spells[i];
ApplyAllStaticFlags(m_creatureDifficulty.StaticFlags);
CreatureStaticFlagsHolder staticFlags = GenerateStaticFlags(m_creatureDifficulty, GetSpawnId(), GetMap().GetDifficultyID());
ApplyAllStaticFlags(staticFlags);
_staticFlags.ApplyFlag(CreatureStaticFlags.NoXp, creatureInfo.CreatureType == CreatureType.Critter || IsPet() || IsTotem() || creatureInfo.FlagsExtra.HasFlag(CreatureFlagsExtra.NoXP));
@@ -416,6 +417,30 @@ namespace Game.Entities
return true;
}
/// <summary>
/// Draws data from m_creatureDifficulty and spawn/difficulty based override data and returns a CreatureStaticFlagsHolder value which contains the data of both
/// </summary>
/// <param name="creatureDifficulty"></param>
/// <param name="spawnId"></param>
/// <param name="difficultyId"></param>
/// <returns></returns>
CreatureStaticFlagsHolder GenerateStaticFlags(CreatureDifficulty creatureDifficulty, ulong spawnId, Difficulty difficultyId)
{
CreatureStaticFlagsOverride staticFlagsOverride = Global.ObjectMgr.GetCreatureStaticFlagsOverride(spawnId, difficultyId);
if (staticFlagsOverride == null)
return creatureDifficulty.StaticFlags;
return new CreatureStaticFlagsHolder(
staticFlagsOverride.StaticFlags1.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags()),
staticFlagsOverride.StaticFlags2.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags2()),
staticFlagsOverride.StaticFlags3.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags3()),
staticFlagsOverride.StaticFlags4.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags4()),
staticFlagsOverride.StaticFlags5.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags5()),
staticFlagsOverride.StaticFlags6.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags6()),
staticFlagsOverride.StaticFlags7.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags7()),
staticFlagsOverride.StaticFlags8.GetValueOrDefault(creatureDifficulty.StaticFlags.GetFlags8()));
}
void ApplyAllStaticFlags(CreatureStaticFlagsHolder flags)
{
_staticFlags = flags;