aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-07-03 14:35:01 +0200
committerShauren <shauren.trinity@gmail.com>2024-07-03 14:35:01 +0200
commitb3bdb4efef5d89df023fcccd6975edfd1ebd9903 (patch)
treee6e014a2d0c50251b22c99f88ee5edc38f7ed871 /src
parent90610b4f6fe0cdc9674668996c09c7cb485e2713 (diff)
Core/Spells: Implemented SPELL_ATTR9_CANNOT_KILL_TARGET
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp3
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp6
3 files changed, 7 insertions, 4 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index a70f5529b74..9460f97bea0 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -940,6 +940,9 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons
}
}
+ if (spellProto && spellProto->HasAttribute(SPELL_ATTR9_CANNOT_KILL_TARGET) && damageTaken >= health)
+ damageTaken = health - 1;
+
if (attacker && attacker != victim)
{
if (Player* killer = attacker->ToPlayer())
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index fda10c6ae7b..8d4c63961e8 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -787,7 +787,7 @@ enum SpellAttr9 : uint32
SPELL_ATTR9_DONT_CONSUME_CHARGE_IF_ITEM_DELETED = 0x02000000, /*NYI - some sort of bugfix attribute to prevent double item deletion?*/ // TITLE (Programmer Only) Don't consume charge if item deleted
SPELL_ATTR9_ITEM_PASSIVE_ON_CLIENT = 0x04000000, // TITLE Item Passive On Client
SPELL_ATTR9_FORCE_CORPSE_TARGET = 0x08000000, // TITLE Force Corpse Target DESCRIPTION Causes the spell to continue executing effects on the target even if one of them kills it
- SPELL_ATTR9_UNK28 = 0x10000000, // TITLE Unknown attribute 28@Attr9
+ SPELL_ATTR9_CANNOT_KILL_TARGET = 0x10000000, // TITLE Cannot Kill Target
SPELL_ATTR9_UNK29 = 0x20000000, // TITLE Unknown attribute 29@Attr9
SPELL_ATTR9_UNK30 = 0x40000000, // TITLE Unknown attribute 30@Attr9
SPELL_ATTR9_UNK31 = 0x80000000 // TITLE Unknown attribute 31@Attr9
diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
index f283edcc1ca..8bcf6b86d69 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -1463,7 +1463,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value)
case SPELL_ATTR9_DONT_CONSUME_CHARGE_IF_ITEM_DELETED: return { "SPELL_ATTR9_DONT_CONSUME_CHARGE_IF_ITEM_DELETED", "(Programmer Only) Don't consume charge if item deleted", "" };
case SPELL_ATTR9_ITEM_PASSIVE_ON_CLIENT: return { "SPELL_ATTR9_ITEM_PASSIVE_ON_CLIENT", "Item Passive On Client", "" };
case SPELL_ATTR9_FORCE_CORPSE_TARGET: return { "SPELL_ATTR9_FORCE_CORPSE_TARGET", "Force Corpse Target", "Causes the spell to continue executing effects on the target even if one of them kills it" };
- case SPELL_ATTR9_UNK28: return { "SPELL_ATTR9_UNK28", "Unknown attribute 28@Attr9", "" };
+ case SPELL_ATTR9_CANNOT_KILL_TARGET: return { "SPELL_ATTR9_CANNOT_KILL_TARGET", "Cannot Kill Target", "" };
case SPELL_ATTR9_UNK29: return { "SPELL_ATTR9_UNK29", "Unknown attribute 29@Attr9", "" };
case SPELL_ATTR9_UNK30: return { "SPELL_ATTR9_UNK30", "Unknown attribute 30@Attr9", "" };
case SPELL_ATTR9_UNK31: return { "SPELL_ATTR9_UNK31", "Unknown attribute 31@Attr9", "" };
@@ -1507,7 +1507,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index)
case 25: return SPELL_ATTR9_DONT_CONSUME_CHARGE_IF_ITEM_DELETED;
case 26: return SPELL_ATTR9_ITEM_PASSIVE_ON_CLIENT;
case 27: return SPELL_ATTR9_FORCE_CORPSE_TARGET;
- case 28: return SPELL_ATTR9_UNK28;
+ case 28: return SPELL_ATTR9_CANNOT_KILL_TARGET;
case 29: return SPELL_ATTR9_UNK29;
case 30: return SPELL_ATTR9_UNK30;
case 31: return SPELL_ATTR9_UNK31;
@@ -1548,7 +1548,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value)
case SPELL_ATTR9_DONT_CONSUME_CHARGE_IF_ITEM_DELETED: return 25;
case SPELL_ATTR9_ITEM_PASSIVE_ON_CLIENT: return 26;
case SPELL_ATTR9_FORCE_CORPSE_TARGET: return 27;
- case SPELL_ATTR9_UNK28: return 28;
+ case SPELL_ATTR9_CANNOT_KILL_TARGET: return 28;
case SPELL_ATTR9_UNK29: return 29;
case SPELL_ATTR9_UNK30: return 30;
case SPELL_ATTR9_UNK31: return 31;