diff options
author | Giacomo Pozzoni <giacomopoz@gmail.com> | 2020-07-22 17:32:29 +0000 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-01-23 22:35:00 +0100 |
commit | 1dfcb7086e17902f0904ee6c09bc55a229b65cc1 (patch) | |
tree | c96ffc9f1f6bc30e100aa67af193143b592ee956 | |
parent | 3499f518b52552a411e2b1cbdc3d922e64347f02 (diff) |
Core/Combat: Disable triggers entering combat (#25086)
* Core/Combat: Disable triggers entering combat
* Move check to database flags_extra flag in creature_template with value 0x00002000
* Fix Rotface puddle stalker too
* Rename 9999_99_99_99_world.sql to 2020_07_22_00_world.sql
(cherry picked from commit 6440c3bcac85a40de5c34aef1d8a8856966cc140)
5 files changed, 16 insertions, 4 deletions
diff --git a/sql/updates/world/master/2022_01_23_02_world_2020_07_22_00_world.sql b/sql/updates/world/master/2022_01_23_02_world_2020_07_22_00_world.sql new file mode 100644 index 00000000000..4f59b08a38a --- /dev/null +++ b/sql/updates/world/master/2022_01_23_02_world_2020_07_22_00_world.sql @@ -0,0 +1,5 @@ +-- +UPDATE creature_template SET flags_extra = flags_extra | 0x00002000 /* CREATURE_FLAG_EXTRA_NO_COMBAT */ WHERE entry IN +(37744 -- ICC Frost Freeze Trap +,37013 -- ICC Rotface Puddle Stalker +); diff --git a/src/server/game/Combat/CombatManager.cpp b/src/server/game/Combat/CombatManager.cpp index ba752dcc20b..edf47fdca87 100644 --- a/src/server/game/Combat/CombatManager.cpp +++ b/src/server/game/Combat/CombatManager.cpp @@ -43,6 +43,12 @@ return false; if (a->HasUnitState(UNIT_STATE_IN_FLIGHT) || b->HasUnitState(UNIT_STATE_IN_FLIGHT)) return false; + if (Creature const* aCreature = a->ToCreature()) + if (aCreature->IsCombatDisallowed()) + return false; + if (Creature const* bCreature = b->ToCreature()) + if (bCreature->IsCombatDisallowed()) + return false; if (a->IsFriendlyTo(b) || b->IsFriendlyTo(a)) return false; Player const* playerA = a->GetCharmerOrOwnerPlayerOrPlayerItself(); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 7e1d4ac0b8d..d75965446c0 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -105,6 +105,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool IsCivilian() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN) != 0; } bool IsTrigger() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) != 0; } bool IsGuard() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD) != 0; } + bool IsCombatDisallowed() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_COMBAT) != 0; } void InitializeMovementFlags(); void UpdateMovementFlags(); diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 626dbaa03ea..04eea5bace3 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -272,7 +272,7 @@ enum CreatureFlagsExtra : uint32 CREATURE_FLAG_EXTRA_GHOST_VISIBILITY = 0x00000400, // creature will be only visible for dead players CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK = 0x00000800, // creature will use offhand attacks CREATURE_FLAG_EXTRA_NO_SELL_VENDOR = 0x00001000, // players can't sell items to this vendor - CREATURE_FLAG_EXTRA_UNUSED_13 = 0x00002000, + CREATURE_FLAG_EXTRA_NO_COMBAT = 0x00002000, // creature is not allowed to enter combat CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging) CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard CREATURE_FLAG_EXTRA_UNUSED_16 = 0x00010000, @@ -293,7 +293,7 @@ enum CreatureFlagsExtra : uint32 CREATURE_FLAG_EXTRA_UNUSED_31 = 0x80000000, // Masks - CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_13 | CREATURE_FLAG_EXTRA_UNUSED_16 | CREATURE_FLAG_EXTRA_UNUSED_22 | + CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_16 | CREATURE_FLAG_EXTRA_UNUSED_22 | CREATURE_FLAG_EXTRA_UNUSED_23 | CREATURE_FLAG_EXTRA_UNUSED_24 | CREATURE_FLAG_EXTRA_UNUSED_25 | CREATURE_FLAG_EXTRA_UNUSED_26 | CREATURE_FLAG_EXTRA_UNUSED_27 | CREATURE_FLAG_EXTRA_UNUSED_31), // SKIP diff --git a/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp b/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp index 8186f6815cf..f15a5d8ca16 100644 --- a/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp +++ b/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp @@ -46,7 +46,7 @@ TC_API_EXPORT EnumText EnumUtils<CreatureFlagsExtra>::ToString(CreatureFlagsExtr case CREATURE_FLAG_EXTRA_GHOST_VISIBILITY: return { "CREATURE_FLAG_EXTRA_GHOST_VISIBILITY", "CREATURE_FLAG_EXTRA_GHOST_VISIBILITY", "creature will be only visible for dead players" }; case CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK: return { "CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK", "CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK", "creature will use offhand attacks" }; case CREATURE_FLAG_EXTRA_NO_SELL_VENDOR: return { "CREATURE_FLAG_EXTRA_NO_SELL_VENDOR", "CREATURE_FLAG_EXTRA_NO_SELL_VENDOR", "players can't sell items to this vendor" }; - case CREATURE_FLAG_EXTRA_UNUSED_13: return { "CREATURE_FLAG_EXTRA_UNUSED_13", "CREATURE_FLAG_EXTRA_UNUSED_13", "" }; + case CREATURE_FLAG_EXTRA_NO_COMBAT: return { "CREATURE_FLAG_EXTRA_NO_COMBAT", "CREATURE_FLAG_EXTRA_NO_COMBAT", "creature is not allowed to enter combat" }; case CREATURE_FLAG_EXTRA_WORLDEVENT: return { "CREATURE_FLAG_EXTRA_WORLDEVENT", "CREATURE_FLAG_EXTRA_WORLDEVENT", "custom flag for world event creatures (left room for merging)" }; case CREATURE_FLAG_EXTRA_GUARD: return { "CREATURE_FLAG_EXTRA_GUARD", "CREATURE_FLAG_EXTRA_GUARD", "Creature is guard" }; case CREATURE_FLAG_EXTRA_UNUSED_16: return { "CREATURE_FLAG_EXTRA_UNUSED_16", "CREATURE_FLAG_EXTRA_UNUSED_16", "" }; @@ -90,7 +90,7 @@ TC_API_EXPORT CreatureFlagsExtra EnumUtils<CreatureFlagsExtra>::FromIndex(size_t case 10: return CREATURE_FLAG_EXTRA_GHOST_VISIBILITY; case 11: return CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK; case 12: return CREATURE_FLAG_EXTRA_NO_SELL_VENDOR; - case 13: return CREATURE_FLAG_EXTRA_UNUSED_13; + case 13: return CREATURE_FLAG_EXTRA_NO_COMBAT; case 14: return CREATURE_FLAG_EXTRA_WORLDEVENT; case 15: return CREATURE_FLAG_EXTRA_GUARD; case 16: return CREATURE_FLAG_EXTRA_UNUSED_16; |