diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-06-18 16:36:00 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-06-18 16:36:00 +0200 |
commit | 7282a1772568111f95a1fb85e95f92421439c097 (patch) | |
tree | f5aeba8b869f0d670f34ad2320b8e14479ded588 | |
parent | f93b4d6c438b337d15bf1666f6f0e050beb97ce4 (diff) |
Core/Creatures: Added db fields to hold creature static flags
-rw-r--r-- | sql/updates/world/master/2023_06_18_00_world.sql | 9 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 2 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 14 |
5 files changed, 33 insertions, 2 deletions
diff --git a/sql/updates/world/master/2023_06_18_00_world.sql b/sql/updates/world/master/2023_06_18_00_world.sql new file mode 100644 index 00000000000..9822a1d24c8 --- /dev/null +++ b/sql/updates/world/master/2023_06_18_00_world.sql @@ -0,0 +1,9 @@ +ALTER TABLE `creature_template_difficulty` + ADD `StaticFlags1` int unsigned NOT NULL DEFAULT 0 AFTER `GoldMax`, + ADD `StaticFlags2` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags1`, + ADD `StaticFlags3` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags2`, + ADD `StaticFlags4` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags3`, + ADD `StaticFlags5` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags4`, + ADD `StaticFlags6` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags5`, + ADD `StaticFlags7` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags6`, + ADD `StaticFlags8` int unsigned NOT NULL DEFAULT 0 AFTER `StaticFlags7`; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 708d3ab4c48..f59dfc4d3d4 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -560,6 +560,8 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i) m_spells[i] = GetCreatureTemplate()->spells[i]; + ApplyAllStaticFlags(m_creatureDifficulty->StaticFlags); + _staticFlags.ApplyFlag(CREATURE_STATIC_FLAG_NO_XP, creatureInfo->type == CREATURE_TYPE_CRITTER || IsPet() || IsTotem() @@ -683,6 +685,12 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, return true; } +void Creature::ApplyAllStaticFlags(CreatureStaticFlagsHolder const& flags) +{ + // Apply all other side effects of flag changes + SetTemplateRooted(flags.HasFlag(CREATURE_STATIC_FLAG_SESSILE)); +} + void Creature::Update(uint32 diff) { if (IsAIEnabled() && m_triggerJustAppeared && m_deathState != DEAD) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 1876b77f664..3220fb38c8c 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -511,6 +511,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma time_t _lastDamagedTime; // Part of Evade mechanics CreatureTextRepeatGroup m_textRepeat; + void ApplyAllStaticFlags(CreatureStaticFlagsHolder const& flags); + CreatureStaticFlagsHolder _staticFlags; // Regenerate health diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index e84c1541749..fdf89fb2668 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -477,6 +477,8 @@ struct CreatureDifficulty uint32 GoldMin; uint32 GoldMax; + CreatureStaticFlagsHolder StaticFlags; + // Helpers int32 GetHealthScalingExpansion() const { diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 4228576ada1..5a9845992e8 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -922,8 +922,15 @@ void ObjectMgr::LoadCreatureTemplateDifficulty() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 - QueryResult result = WorldDatabase.Query("SELECT Entry, DifficultyID, LevelScalingDeltaMin, LevelScalingDeltaMax, ContentTuningID, HealthScalingExpansion, HealthModifier, ManaModifier, ArmorModifier, DamageModifier, CreatureDifficultyID, TypeFlags, TypeFlags2, LootID, PickPocketLootID, SkinLootID, GoldMin, GoldMax FROM creature_template_difficulty ORDER BY Entry"); + // 0 1 2 3 4 5 + QueryResult result = WorldDatabase.Query("SELECT Entry, DifficultyID, LevelScalingDeltaMin, LevelScalingDeltaMax, ContentTuningID, HealthScalingExpansion, " + // 6 7 8 9 10 11 12 + "HealthModifier, ManaModifier, ArmorModifier, DamageModifier, CreatureDifficultyID, TypeFlags, TypeFlags2, " + // 13 14 15 16 17 + "LootID, PickPocketLootID, SkinLootID, GoldMin, GoldMax," + // 18 19 20 21 22 23 24 25 + "StaticFlags1, StaticFlags2, StaticFlags3, StaticFlags4, StaticFlags5, StaticFlags6, StaticFlags7, StaticFlags8 " + "FROM creature_template_difficulty ORDER BY Entry"); if (!result) { @@ -963,6 +970,9 @@ void ObjectMgr::LoadCreatureTemplateDifficulty() creatureDifficulty.SkinLootID = fields[15].GetUInt32(); creatureDifficulty.GoldMin = fields[16].GetUInt32(); creatureDifficulty.GoldMax = fields[17].GetUInt32(); + creatureDifficulty.StaticFlags = { CreatureStaticFlags(fields[18].GetUInt32()), CreatureStaticFlags2(fields[19].GetUInt32()), + CreatureStaticFlags3(fields[20].GetUInt32()), CreatureStaticFlags4(fields[21].GetUInt32()), CreatureStaticFlags5(fields[22].GetUInt32()), + CreatureStaticFlags6(fields[23].GetUInt32()), CreatureStaticFlags7(fields[24].GetUInt32()), CreatureStaticFlags8(fields[25].GetUInt32()) }; // TODO: Check if this still applies creatureDifficulty.DamageModifier *= Creature::_GetDamageMod(itr->second.rank); |