aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-10-15 13:52:11 +0200
committerShauren <shauren.trinity@gmail.com>2023-10-15 13:52:11 +0200
commit0f7dd4eadf90a5407fd232d083485430d725152f (patch)
treeaabf39964f6faaf8eb975394502bac26822b1f0c /src
parent1763fcb70555c86e654bd3f16306611c773b6738 (diff)
Core/Auras: Implemented SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD (suppress aura applications while dead without removing the aura)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/enuminfo_CreatureData.cpp2
-rw-r--r--src/server/game/Entities/Item/enuminfo_ItemDefines.cpp16
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp18
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp3
5 files changed, 31 insertions, 10 deletions
diff --git a/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp b/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp
index 13fcc0cb512..86b2bae5d5a 100644
--- a/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp
+++ b/src/server/game/Entities/Creature/enuminfo_CreatureData.cpp
@@ -59,7 +59,7 @@ TC_API_EXPORT EnumText EnumUtils<CreatureFlagsExtra>::ToString(CreatureFlagsExtr
case CREATURE_FLAG_EXTRA_UNUSED_25: return { "CREATURE_FLAG_EXTRA_UNUSED_25", "CREATURE_FLAG_EXTRA_UNUSED_25", "" };
case CREATURE_FLAG_EXTRA_UNUSED_26: return { "CREATURE_FLAG_EXTRA_UNUSED_26", "CREATURE_FLAG_EXTRA_UNUSED_26", "" };
case CREATURE_FLAG_EXTRA_UNUSED_27: return { "CREATURE_FLAG_EXTRA_UNUSED_27", "CREATURE_FLAG_EXTRA_UNUSED_27", "" };
- case CREATURE_FLAG_EXTRA_DUNGEON_BOSS: return { "CREATURE_FLAG_EXTRA_DUNGEON_BOSS", "CREATURE_FLAG_EXTRA_DUNGEON_BOSS", "creature is a dungeon boss (SET DYNAMICALLY, DO NOT ADD IN DB)" };
+ case CREATURE_FLAG_EXTRA_DUNGEON_BOSS: return { "CREATURE_FLAG_EXTRA_DUNGEON_BOSS", "CREATURE_FLAG_EXTRA_DUNGEON_BOSS", "creature is a dungeon boss" };
case CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING: return { "CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING", "CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING", "creature ignore pathfinding" };
case CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK: return { "CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK", "CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK", "creature is immune to knockback effects" };
case CREATURE_FLAG_EXTRA_UNUSED_31: return { "CREATURE_FLAG_EXTRA_UNUSED_31", "CREATURE_FLAG_EXTRA_UNUSED_31", "" };
diff --git a/src/server/game/Entities/Item/enuminfo_ItemDefines.cpp b/src/server/game/Entities/Item/enuminfo_ItemDefines.cpp
index d186091229b..c5f91ead4b3 100644
--- a/src/server/game/Entities/Item/enuminfo_ItemDefines.cpp
+++ b/src/server/game/Entities/Item/enuminfo_ItemDefines.cpp
@@ -149,12 +149,13 @@ TC_API_EXPORT EnumText EnumUtils<InventoryResult>::ToString(InventoryResult valu
case EQUIP_ERR_REAGENTBAG_WRONG_SLOT: return { "EQUIP_ERR_REAGENTBAG_WRONG_SLOT", "EQUIP_ERR_REAGENTBAG_WRONG_SLOT", "Reagent Bags can only be placed in the reagent bag slot." };
case EQUIP_ERR_SLOT_ONLY_REAGENTBAG: return { "EQUIP_ERR_SLOT_ONLY_REAGENTBAG", "EQUIP_ERR_SLOT_ONLY_REAGENTBAG", "Only Reagent Bags can be placed in the reagent bag slot." };
case EQUIP_ERR_REAGENTBAG_ITEM_TYPE: return { "EQUIP_ERR_REAGENTBAG_ITEM_TYPE", "EQUIP_ERR_REAGENTBAG_ITEM_TYPE", "Only Reagents can be placed in Reagent Bags." };
+ case EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND: return { "EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND", "EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND", "Items that can be refunded can't be bulk sold." };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<InventoryResult>::Count() { return 118; }
+TC_API_EXPORT size_t EnumUtils<InventoryResult>::Count() { return 119; }
template <>
TC_API_EXPORT InventoryResult EnumUtils<InventoryResult>::FromIndex(size_t index)
@@ -279,6 +280,7 @@ TC_API_EXPORT InventoryResult EnumUtils<InventoryResult>::FromIndex(size_t index
case 115: return EQUIP_ERR_REAGENTBAG_WRONG_SLOT;
case 116: return EQUIP_ERR_SLOT_ONLY_REAGENTBAG;
case 117: return EQUIP_ERR_REAGENTBAG_ITEM_TYPE;
+ case 118: return EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND;
default: throw std::out_of_range("index");
}
}
@@ -406,6 +408,7 @@ TC_API_EXPORT size_t EnumUtils<InventoryResult>::ToIndex(InventoryResult value)
case EQUIP_ERR_REAGENTBAG_WRONG_SLOT: return 115;
case EQUIP_ERR_SLOT_ONLY_REAGENTBAG: return 116;
case EQUIP_ERR_REAGENTBAG_ITEM_TYPE: return 117;
+ case EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND: return 118;
default: throw std::out_of_range("value");
}
}
@@ -485,12 +488,15 @@ TC_API_EXPORT EnumText EnumUtils<SellResult>::ToString(SellResult value)
case SELL_ERR_UNK: return { "SELL_ERR_UNK", "SELL_ERR_UNK", "nothing appears..." };
case SELL_ERR_ONLY_EMPTY_BAG: return { "SELL_ERR_ONLY_EMPTY_BAG", "SELL_ERR_ONLY_EMPTY_BAG", "You can only do that with empty bags." };
case SELL_ERR_CANT_SELL_TO_THIS_MERCHANT: return { "SELL_ERR_CANT_SELL_TO_THIS_MERCHANT", "SELL_ERR_CANT_SELL_TO_THIS_MERCHANT", "You cannot sell items to this merchant." };
+ case SELL_ERR_MUST_REPAIR_DURABILITY: return { "SELL_ERR_MUST_REPAIR_DURABILITY", "SELL_ERR_MUST_REPAIR_DURABILITY", "You must repair that item's durability to use it." };
+ case SELL_ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE: return { "SELL_ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE", "SELL_ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE", "The merchant doesn't want that item. Bring it to the Scrapper to extract Titan Residuum." };
+ case SELL_ERR_INTERNAL_BAG_ERROR: return { "SELL_ERR_INTERNAL_BAG_ERROR", "SELL_ERR_INTERNAL_BAG_ERROR", "Internal Bag Error" };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<SellResult>::Count() { return 7; }
+TC_API_EXPORT size_t EnumUtils<SellResult>::Count() { return 10; }
template <>
TC_API_EXPORT SellResult EnumUtils<SellResult>::FromIndex(size_t index)
@@ -504,6 +510,9 @@ TC_API_EXPORT SellResult EnumUtils<SellResult>::FromIndex(size_t index)
case 4: return SELL_ERR_UNK;
case 5: return SELL_ERR_ONLY_EMPTY_BAG;
case 6: return SELL_ERR_CANT_SELL_TO_THIS_MERCHANT;
+ case 7: return SELL_ERR_MUST_REPAIR_DURABILITY;
+ case 8: return SELL_ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE;
+ case 9: return SELL_ERR_INTERNAL_BAG_ERROR;
default: throw std::out_of_range("index");
}
}
@@ -520,6 +529,9 @@ TC_API_EXPORT size_t EnumUtils<SellResult>::ToIndex(SellResult value)
case SELL_ERR_UNK: return 4;
case SELL_ERR_ONLY_EMPTY_BAG: return 5;
case SELL_ERR_CANT_SELL_TO_THIS_MERCHANT: return 6;
+ case SELL_ERR_MUST_REPAIR_DURABILITY: return 7;
+ case SELL_ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE: return 8;
+ case SELL_ERR_INTERNAL_BAG_ERROR: return 9;
default: throw std::out_of_range("value");
}
}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 54b90231206..edcf30d293a 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -687,7 +687,7 @@ enum SpellAttr7 : uint32
{
SPELL_ATTR7_UNK0 = 0x00000001, // TITLE Unknown attribute 0@Attr7
SPELL_ATTR7_IGNORE_DURATION_MODS = 0x00000002, // TITLE Ignore duration modifiers
- SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // TITLE Reactivate at resurrect (client only)
+ SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD = 0x00000004, // TITLE Disable Aura While Dead
SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // TITLE Is cheat spell DESCRIPTION Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS
SPELL_ATTR7_UNK4 = 0x00000010, // TITLE Unknown attribute 4@Attr7 DESCRIPTION Soulstone related?
SPELL_ATTR7_SUMMON_TOTEM = 0x00000020, // TITLE Summons player-owned totem
diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
index 52bdc2be059..1887aaa6d2d 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -1179,7 +1179,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr7>::ToString(SpellAttr7 value)
{
case SPELL_ATTR7_UNK0: return { "SPELL_ATTR7_UNK0", "Unknown attribute 0@Attr7", "" };
case SPELL_ATTR7_IGNORE_DURATION_MODS: return { "SPELL_ATTR7_IGNORE_DURATION_MODS", "Ignore duration modifiers", "" };
- case SPELL_ATTR7_REACTIVATE_AT_RESURRECT: return { "SPELL_ATTR7_REACTIVATE_AT_RESURRECT", "Reactivate at resurrect (client only)", "" };
+ case SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD: return { "SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD", "Disable Aura While Dead", "" };
case SPELL_ATTR7_IS_CHEAT_SPELL: return { "SPELL_ATTR7_IS_CHEAT_SPELL", "Is cheat spell", "Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS" };
case SPELL_ATTR7_UNK4: return { "SPELL_ATTR7_UNK4", "Unknown attribute 4@Attr7", "Soulstone related?" };
case SPELL_ATTR7_SUMMON_TOTEM: return { "SPELL_ATTR7_SUMMON_TOTEM", "Summons player-owned totem", "" };
@@ -1223,7 +1223,7 @@ TC_API_EXPORT SpellAttr7 EnumUtils<SpellAttr7>::FromIndex(size_t index)
{
case 0: return SPELL_ATTR7_UNK0;
case 1: return SPELL_ATTR7_IGNORE_DURATION_MODS;
- case 2: return SPELL_ATTR7_REACTIVATE_AT_RESURRECT;
+ case 2: return SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD;
case 3: return SPELL_ATTR7_IS_CHEAT_SPELL;
case 4: return SPELL_ATTR7_UNK4;
case 5: return SPELL_ATTR7_SUMMON_TOTEM;
@@ -1264,7 +1264,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr7>::ToIndex(SpellAttr7 value)
{
case SPELL_ATTR7_UNK0: return 0;
case SPELL_ATTR7_IGNORE_DURATION_MODS: return 1;
- case SPELL_ATTR7_REACTIVATE_AT_RESURRECT: return 2;
+ case SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD: return 2;
case SPELL_ATTR7_IS_CHEAT_SPELL: return 3;
case SPELL_ATTR7_UNK4: return 4;
case SPELL_ATTR7_SUMMON_TOTEM: return 5;
@@ -2528,13 +2528,15 @@ TC_API_EXPORT EnumText EnumUtils<SpellCastResult>::ToString(SpellCastResult valu
case SPELL_FAILED_CANT_BE_RECRAFTED: return { "SPELL_FAILED_CANT_BE_RECRAFTED", "SPELL_FAILED_CANT_BE_RECRAFTED", "" };
case SPELL_FAILED_PASSIVE_REPLACED: return { "SPELL_FAILED_PASSIVE_REPLACED", "SPELL_FAILED_PASSIVE_REPLACED", "" };
case SPELL_FAILED_CANT_FLY_HERE: return { "SPELL_FAILED_CANT_FLY_HERE", "SPELL_FAILED_CANT_FLY_HERE", "" };
+ case SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT: return { "SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT", "SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT", "" };
+ case SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN: return { "SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN", "SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN", "" };
case SPELL_FAILED_UNKNOWN: return { "SPELL_FAILED_UNKNOWN", "SPELL_FAILED_UNKNOWN", "" };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<SpellCastResult>::Count() { return 320; }
+TC_API_EXPORT size_t EnumUtils<SpellCastResult>::Count() { return 322; }
template <>
TC_API_EXPORT SpellCastResult EnumUtils<SpellCastResult>::FromIndex(size_t index)
@@ -2860,7 +2862,9 @@ TC_API_EXPORT SpellCastResult EnumUtils<SpellCastResult>::FromIndex(size_t index
case 316: return SPELL_FAILED_CANT_BE_RECRAFTED;
case 317: return SPELL_FAILED_PASSIVE_REPLACED;
case 318: return SPELL_FAILED_CANT_FLY_HERE;
- case 319: return SPELL_FAILED_UNKNOWN;
+ case 319: return SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT;
+ case 320: return SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN;
+ case 321: return SPELL_FAILED_UNKNOWN;
default: throw std::out_of_range("index");
}
}
@@ -3189,7 +3193,9 @@ TC_API_EXPORT size_t EnumUtils<SpellCastResult>::ToIndex(SpellCastResult value)
case SPELL_FAILED_CANT_BE_RECRAFTED: return 316;
case SPELL_FAILED_PASSIVE_REPLACED: return 317;
case SPELL_FAILED_CANT_FLY_HERE: return 318;
- case SPELL_FAILED_UNKNOWN: return 319;
+ case SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT: return 319;
+ case SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN: return 320;
+ case SPELL_FAILED_UNKNOWN: return 321;
default: throw std::out_of_range("value");
}
}
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index b8095cab43c..6c48b5cb247 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -2475,6 +2475,9 @@ void UnitAura::Remove(AuraRemoveMode removeMode)
void UnitAura::FillTargetMap(std::unordered_map<Unit*, uint32>& targets, Unit* caster)
{
+ if (GetSpellInfo()->HasAttribute(SPELL_ATTR7_DISABLE_AURA_WHILE_DEAD) && !GetUnitOwner()->IsAlive())
+ return;
+
Unit* ref = caster;
if (!ref)
ref = GetUnitOwner();