aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-07-02 23:17:57 +0200
committerShauren <shauren.trinity@gmail.com>2022-07-02 23:17:57 +0200
commit2a5329847636ddc080c461bda06375edfbf3815d (patch)
treec5b526f9241622955b8ad628cd02820de1e9ccd9 /src
parent1a967dcd140e1ec7b2adcc20f6bc62a28abf6589 (diff)
Core/Units: Defined many UnitFlags3 and implemented UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h71
-rw-r--r--src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp106
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp20
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp6
5 files changed, 180 insertions, 24 deletions
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 7eeb58b540b..46a1e488c5f 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -224,10 +224,48 @@ DEFINE_ENUM_FLAG(UnitFlags2);
// EnumUtils: DESCRIBE THIS
enum UnitFlags3 : uint32
{
- UNIT_FLAG3_UNK1 = 0x00000001,
-
- UNIT_FLAG3_DISALLOWED = 0xFFFFFFFF, // SKIP
- UNIT_FLAG3_ALLOWED = (0xFFFFFFFF & ~UNIT_FLAG3_DISALLOWED) // SKIP
+ UNIT_FLAG3_UNK0 = 0x00000001,
+ UNIT_FLAG3_UNCONSCIOUS_ON_DEATH = 0x00000002, // TITLE Unconscious on Death DESCRIPTION Shows "Unconscious" in unit tooltip instead of "Dead"
+ UNIT_FLAG3_ALLOW_MOUNTED_COMBAT = 0x00000004, // TITLE Allow mounted combat
+ UNIT_FLAG3_GARRISON_PET = 0x00000008, // TITLE Garrison pet DESCRIPTION Special garrison pet creatures that display one of favorite player battle pets - this flag allows querying name and turns off default battle pet behavior
+ UNIT_FLAG3_UI_CAN_GET_POSITION = 0x00000010, // TITLE UI Can Get Position DESCRIPTION Allows lua functions like UnitPosition to always get the position even for npcs or non-grouped players
+ UNIT_FLAG3_AI_OBSTACLE = 0x00000020,
+ UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE = 0x00000040,
+ UNIT_FLAG3_SUPPRESS_ALL_NPC_FEEDBACK = 0x00000080, // TITLE Suppress all NPC feedback DESCRIPTION Skips playing sounds on left clicking npc for all npcs as long as npc with this flag is visible
+ UNIT_FLAG3_IGNORE_COMBAT = 0x00000100, // TITLE Ignore Combat DESCRIPTION Same as SPELL_AURA_IGNORE_COMBAT
+ UNIT_FLAG3_SUPPRESS_NPC_FEEDBACK = 0x00000200, // TITLE Suppress NPC feedback DESCRIPTION Skips playing sounds on left clicking npc
+ UNIT_FLAG3_UNK10 = 0x00000400,
+ UNIT_FLAG3_UNK11 = 0x00000800,
+ UNIT_FLAG3_UNK12 = 0x00001000,
+ UNIT_FLAG3_FAKE_DEAD = 0x00002000, // TITLE Show as dead
+ UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE = 0x00004000, // Causes the creature to both not change facing on interaction and speeds up smooth facing changes while attacking (clientside)
+ UNIT_FLAG3_UNTARGETABLE_FROM_UI = 0x00008000, // TITLE Untargetable from UI DESCRIPTION Cannot be targeted from lua functions StartAttack, TargetUnit, PetAttack
+ UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD = 0x00010000, // Prevents facing changes while interacting if creature has flag UNIT_FLAG3_FAKE_DEAD
+ UNIT_FLAG3_ALREADY_SKINNED = 0x00020000,
+ UNIT_FLAG3_SUPPRESS_ALL_NPC_SOUNDS = 0x00040000, // TITLE Suppress all NPC sounds DESCRIPTION Skips playing sounds on beginning and end of npc interaction for all npcs as long as npc with this flag is visible
+ UNIT_FLAG3_SUPPRESS_NPC_SOUNDS = 0x00080000, // TITLE Suppress NPC sounds DESCRIPTION Skips playing sounds on beginning and end of npc interaction
+ UNIT_FLAG3_UNK20 = 0x00100000,
+ UNIT_FLAG3_UNK21 = 0x00200000,
+ UNIT_FLAG3_DONT_FADE_OUT = 0x00400000,
+ UNIT_FLAG3_UNK23 = 0x00800000,
+ UNIT_FLAG3_UNK24 = 0x01000000,
+ UNIT_FLAG3_UNK25 = 0x02000000,
+ UNIT_FLAG3_UNK26 = 0x04000000,
+ UNIT_FLAG3_UNK27 = 0x08000000,
+ UNIT_FLAG3_UNK28 = 0x10000000,
+ UNIT_FLAG3_UNK29 = 0x20000000,
+ UNIT_FLAG3_UNK30 = 0x40000000,
+ UNIT_FLAG3_UNK31 = 0x80000000,
+
+ UNIT_FLAG3_DISALLOWED = (UNIT_FLAG3_UNK0 | /* UNIT_FLAG3_UNCONSCIOUS_ON_DEATH | */ /* UNIT_FLAG3_ALLOW_MOUNTED_COMBAT | */ UNIT_FLAG3_GARRISON_PET |
+ /* UNIT_FLAG3_UI_CAN_GET_POSITION | */ /* UNIT_FLAG3_AI_OBSTACLE | */ UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE | /* UNIT_FLAG3_SUPPRESS_ALL_NPC_FEEDBACK | */
+ UNIT_FLAG3_IGNORE_COMBAT | UNIT_FLAG3_SUPPRESS_NPC_FEEDBACK | UNIT_FLAG3_UNK10 | UNIT_FLAG3_UNK11 |
+ UNIT_FLAG3_UNK12 | /* UNIT_FLAG3_FAKE_DEAD | */ /* UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE | */ /* UNIT_FLAG3_UNTARGETABLE_FROM_UI | */
+ /* UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD | */ UNIT_FLAG3_ALREADY_SKINNED | /* UNIT_FLAG3_SUPPRESS_ALL_NPC_SOUNDS | */ /* UNIT_FLAG3_SUPPRESS_NPC_SOUNDS | */
+ UNIT_FLAG3_UNK20 | UNIT_FLAG3_UNK21 | /* UNIT_FLAG3_DONT_FADE_OUT | */ UNIT_FLAG3_UNK23 |
+ UNIT_FLAG3_UNK24 | UNIT_FLAG3_UNK25 | UNIT_FLAG3_UNK26 | UNIT_FLAG3_UNK27 |
+ UNIT_FLAG3_UNK28 | UNIT_FLAG3_UNK29 | UNIT_FLAG3_UNK30 | UNIT_FLAG3_UNK31), // SKIP
+ UNIT_FLAG3_ALLOWED = (0xFFFFFFFF & ~UNIT_FLAG3_DISALLOWED) // SKIP
};
DEFINE_ENUM_FLAG(UnitFlags3);
@@ -276,18 +314,19 @@ DEFINE_ENUM_FLAG(NPCFlags);
// EnumUtils: DESCRIBE THIS
enum NPCFlags2 : uint32
{
- UNIT_NPC_FLAG_2_NONE = 0x0000,
- UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER = 0x0001, // TITLE is item upgrade
- UNIT_NPC_FLAG_2_GARRISON_ARCHITECT = 0x0002, // TITLE is garrison architect DESCRIPTION garrison building placement UI
- UNIT_NPC_FLAG_2_STEERING = 0x0004, // TITLE is avoiding obstacles DESCRIPTION clientside pathfinding
- UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER = 0x0010, // TITLE is shipment crafter DESCRIPTION garrison work orders
- UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC = 0x0020, // TITLE is garrison mission
- UNIT_NPC_FLAG_2_TRADESKILL_NPC = 0x0040, // TITLE is tradeskill DESCRIPTION crafting at npc
- UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW = 0x0080, // TITLE is black market view DESCRIPTION only allows viewing black market auctions, no bidding
- UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC = 0x0200, // TITLE is garrrison talent
- UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR = 0x0400, // TITLE is contribution collector
- UNIT_NPC_FLAG_2_AZERITE_RESPEC = 0x4000, // TITLE is azerite respec
- UNIT_NPC_FLAG_2_ISLANDS_QUEUE = 0x8000, // TITLE is islands queue
+ UNIT_NPC_FLAG_2_NONE = 0x00000000,
+ UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER = 0x00000001, // TITLE is item upgrade
+ UNIT_NPC_FLAG_2_GARRISON_ARCHITECT = 0x00000002, // TITLE is garrison architect DESCRIPTION garrison building placement UI
+ UNIT_NPC_FLAG_2_STEERING = 0x00000004, // TITLE is avoiding obstacles DESCRIPTION clientside pathfinding
+ UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER = 0x00000010, // TITLE is shipment crafter DESCRIPTION garrison work orders
+ UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC = 0x00000020, // TITLE is garrison mission
+ UNIT_NPC_FLAG_2_TRADESKILL_NPC = 0x00000040, // TITLE is tradeskill DESCRIPTION crafting at npc
+ UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW = 0x00000080, // TITLE is black market view DESCRIPTION only allows viewing black market auctions, no bidding
+ UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC = 0x00000200, // TITLE is garrrison talent
+ UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR = 0x00000400, // TITLE is contribution collector
+ UNIT_NPC_FLAG_2_AZERITE_RESPEC = 0x00004000, // TITLE is azerite respec
+ UNIT_NPC_FLAG_2_ISLANDS_QUEUE = 0x00008000, // TITLE is islands queue
+ UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION = 0x00010000,
};
DEFINE_ENUM_FLAG(NPCFlags2);
diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
index 90a130308a0..60bae2e2cb2 100644
--- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
+++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
@@ -289,20 +289,82 @@ TC_API_EXPORT EnumText EnumUtils<UnitFlags3>::ToString(UnitFlags3 value)
{
switch (value)
{
- case UNIT_FLAG3_UNK1: return { "UNIT_FLAG3_UNK1", "UNIT_FLAG3_UNK1", "" };
+ case UNIT_FLAG3_UNK0: return { "UNIT_FLAG3_UNK0", "UNIT_FLAG3_UNK0", "" };
+ case UNIT_FLAG3_UNCONSCIOUS_ON_DEATH: return { "UNIT_FLAG3_UNCONSCIOUS_ON_DEATH", "Unconscious on Death", "Shows \042Unconscious\042 in unit tooltip instead of \042Dead\042" };
+ case UNIT_FLAG3_ALLOW_MOUNTED_COMBAT: return { "UNIT_FLAG3_ALLOW_MOUNTED_COMBAT", "Allow mounted combat", "" };
+ case UNIT_FLAG3_GARRISON_PET: return { "UNIT_FLAG3_GARRISON_PET", "Garrison pet", "Special garrison pet creatures that display one of favorite player battle pets - this flag allows querying name and turns off default battle pet behavior" };
+ case UNIT_FLAG3_UI_CAN_GET_POSITION: return { "UNIT_FLAG3_UI_CAN_GET_POSITION", "UI Can Get Position", "Allows lua functions like UnitPosition to always get the position even for npcs or non-grouped players" };
+ case UNIT_FLAG3_AI_OBSTACLE: return { "UNIT_FLAG3_AI_OBSTACLE", "UNIT_FLAG3_AI_OBSTACLE", "" };
+ case UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE: return { "UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE", "UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE", "" };
+ case UNIT_FLAG3_SUPPRESS_ALL_NPC_FEEDBACK: return { "UNIT_FLAG3_SUPPRESS_ALL_NPC_FEEDBACK", "Suppress all NPC feedback", "Skips playing sounds on left clicking npc for all npcs as long as npc with this flag is visible" };
+ case UNIT_FLAG3_IGNORE_COMBAT: return { "UNIT_FLAG3_IGNORE_COMBAT", "Ignore Combat", "Same as SPELL_AURA_IGNORE_COMBAT" };
+ case UNIT_FLAG3_SUPPRESS_NPC_FEEDBACK: return { "UNIT_FLAG3_SUPPRESS_NPC_FEEDBACK", "Suppress NPC feedback", "Skips playing sounds on left clicking npc" };
+ case UNIT_FLAG3_UNK10: return { "UNIT_FLAG3_UNK10", "UNIT_FLAG3_UNK10", "" };
+ case UNIT_FLAG3_UNK11: return { "UNIT_FLAG3_UNK11", "UNIT_FLAG3_UNK11", "" };
+ case UNIT_FLAG3_UNK12: return { "UNIT_FLAG3_UNK12", "UNIT_FLAG3_UNK12", "" };
+ case UNIT_FLAG3_FAKE_DEAD: return { "UNIT_FLAG3_FAKE_DEAD", "Show as dead", "" };
+ case UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE: return { "UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE", "UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE", "Causes the creature to both not change facing on interaction and speeds up smooth facing changes while attacking (clientside)" };
+ case UNIT_FLAG3_UNTARGETABLE_FROM_UI: return { "UNIT_FLAG3_UNTARGETABLE_FROM_UI", "Untargetable from UI", "Cannot be targeted from lua functions StartAttack, TargetUnit, PetAttack" };
+ case UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD: return { "UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD", "UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD", "Prevents facing changes while interacting if creature has flag UNIT_FLAG3_FAKE_DEAD" };
+ case UNIT_FLAG3_ALREADY_SKINNED: return { "UNIT_FLAG3_ALREADY_SKINNED", "UNIT_FLAG3_ALREADY_SKINNED", "" };
+ case UNIT_FLAG3_SUPPRESS_ALL_NPC_SOUNDS: return { "UNIT_FLAG3_SUPPRESS_ALL_NPC_SOUNDS", "Suppress all NPC sounds", "Skips playing sounds on beginning and end of npc interaction for all npcs as long as npc with this flag is visible" };
+ case UNIT_FLAG3_SUPPRESS_NPC_SOUNDS: return { "UNIT_FLAG3_SUPPRESS_NPC_SOUNDS", "Suppress NPC sounds", "Skips playing sounds on beginning and end of npc interaction" };
+ case UNIT_FLAG3_UNK20: return { "UNIT_FLAG3_UNK20", "UNIT_FLAG3_UNK20", "" };
+ case UNIT_FLAG3_UNK21: return { "UNIT_FLAG3_UNK21", "UNIT_FLAG3_UNK21", "" };
+ case UNIT_FLAG3_DONT_FADE_OUT: return { "UNIT_FLAG3_DONT_FADE_OUT", "UNIT_FLAG3_DONT_FADE_OUT", "" };
+ case UNIT_FLAG3_UNK23: return { "UNIT_FLAG3_UNK23", "UNIT_FLAG3_UNK23", "" };
+ case UNIT_FLAG3_UNK24: return { "UNIT_FLAG3_UNK24", "UNIT_FLAG3_UNK24", "" };
+ case UNIT_FLAG3_UNK25: return { "UNIT_FLAG3_UNK25", "UNIT_FLAG3_UNK25", "" };
+ case UNIT_FLAG3_UNK26: return { "UNIT_FLAG3_UNK26", "UNIT_FLAG3_UNK26", "" };
+ case UNIT_FLAG3_UNK27: return { "UNIT_FLAG3_UNK27", "UNIT_FLAG3_UNK27", "" };
+ case UNIT_FLAG3_UNK28: return { "UNIT_FLAG3_UNK28", "UNIT_FLAG3_UNK28", "" };
+ case UNIT_FLAG3_UNK29: return { "UNIT_FLAG3_UNK29", "UNIT_FLAG3_UNK29", "" };
+ case UNIT_FLAG3_UNK30: return { "UNIT_FLAG3_UNK30", "UNIT_FLAG3_UNK30", "" };
+ case UNIT_FLAG3_UNK31: return { "UNIT_FLAG3_UNK31", "UNIT_FLAG3_UNK31", "" };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<UnitFlags3>::Count() { return 1; }
+TC_API_EXPORT size_t EnumUtils<UnitFlags3>::Count() { return 32; }
template <>
TC_API_EXPORT UnitFlags3 EnumUtils<UnitFlags3>::FromIndex(size_t index)
{
switch (index)
{
- case 0: return UNIT_FLAG3_UNK1;
+ case 0: return UNIT_FLAG3_UNK0;
+ case 1: return UNIT_FLAG3_UNCONSCIOUS_ON_DEATH;
+ case 2: return UNIT_FLAG3_ALLOW_MOUNTED_COMBAT;
+ case 3: return UNIT_FLAG3_GARRISON_PET;
+ case 4: return UNIT_FLAG3_UI_CAN_GET_POSITION;
+ case 5: return UNIT_FLAG3_AI_OBSTACLE;
+ case 6: return UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE;
+ case 7: return UNIT_FLAG3_SUPPRESS_ALL_NPC_FEEDBACK;
+ case 8: return UNIT_FLAG3_IGNORE_COMBAT;
+ case 9: return UNIT_FLAG3_SUPPRESS_NPC_FEEDBACK;
+ case 10: return UNIT_FLAG3_UNK10;
+ case 11: return UNIT_FLAG3_UNK11;
+ case 12: return UNIT_FLAG3_UNK12;
+ case 13: return UNIT_FLAG3_FAKE_DEAD;
+ case 14: return UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE;
+ case 15: return UNIT_FLAG3_UNTARGETABLE_FROM_UI;
+ case 16: return UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD;
+ case 17: return UNIT_FLAG3_ALREADY_SKINNED;
+ case 18: return UNIT_FLAG3_SUPPRESS_ALL_NPC_SOUNDS;
+ case 19: return UNIT_FLAG3_SUPPRESS_NPC_SOUNDS;
+ case 20: return UNIT_FLAG3_UNK20;
+ case 21: return UNIT_FLAG3_UNK21;
+ case 22: return UNIT_FLAG3_DONT_FADE_OUT;
+ case 23: return UNIT_FLAG3_UNK23;
+ case 24: return UNIT_FLAG3_UNK24;
+ case 25: return UNIT_FLAG3_UNK25;
+ case 26: return UNIT_FLAG3_UNK26;
+ case 27: return UNIT_FLAG3_UNK27;
+ case 28: return UNIT_FLAG3_UNK28;
+ case 29: return UNIT_FLAG3_UNK29;
+ case 30: return UNIT_FLAG3_UNK30;
+ case 31: return UNIT_FLAG3_UNK31;
default: throw std::out_of_range("index");
}
}
@@ -312,7 +374,38 @@ TC_API_EXPORT size_t EnumUtils<UnitFlags3>::ToIndex(UnitFlags3 value)
{
switch (value)
{
- case UNIT_FLAG3_UNK1: return 0;
+ case UNIT_FLAG3_UNK0: return 0;
+ case UNIT_FLAG3_UNCONSCIOUS_ON_DEATH: return 1;
+ case UNIT_FLAG3_ALLOW_MOUNTED_COMBAT: return 2;
+ case UNIT_FLAG3_GARRISON_PET: return 3;
+ case UNIT_FLAG3_UI_CAN_GET_POSITION: return 4;
+ case UNIT_FLAG3_AI_OBSTACLE: return 5;
+ case UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE: return 6;
+ case UNIT_FLAG3_SUPPRESS_ALL_NPC_FEEDBACK: return 7;
+ case UNIT_FLAG3_IGNORE_COMBAT: return 8;
+ case UNIT_FLAG3_SUPPRESS_NPC_FEEDBACK: return 9;
+ case UNIT_FLAG3_UNK10: return 10;
+ case UNIT_FLAG3_UNK11: return 11;
+ case UNIT_FLAG3_UNK12: return 12;
+ case UNIT_FLAG3_FAKE_DEAD: return 13;
+ case UNIT_FLAG3_NO_FACING_ON_INTERACT_AND_FAST_FACING_CHASE: return 14;
+ case UNIT_FLAG3_UNTARGETABLE_FROM_UI: return 15;
+ case UNIT_FLAG3_NO_FACING_ON_INTERACT_WHILE_FAKE_DEAD: return 16;
+ case UNIT_FLAG3_ALREADY_SKINNED: return 17;
+ case UNIT_FLAG3_SUPPRESS_ALL_NPC_SOUNDS: return 18;
+ case UNIT_FLAG3_SUPPRESS_NPC_SOUNDS: return 19;
+ case UNIT_FLAG3_UNK20: return 20;
+ case UNIT_FLAG3_UNK21: return 21;
+ case UNIT_FLAG3_DONT_FADE_OUT: return 22;
+ case UNIT_FLAG3_UNK23: return 23;
+ case UNIT_FLAG3_UNK24: return 24;
+ case UNIT_FLAG3_UNK25: return 25;
+ case UNIT_FLAG3_UNK26: return 26;
+ case UNIT_FLAG3_UNK27: return 27;
+ case UNIT_FLAG3_UNK28: return 28;
+ case UNIT_FLAG3_UNK29: return 29;
+ case UNIT_FLAG3_UNK30: return 30;
+ case UNIT_FLAG3_UNK31: return 31;
default: throw std::out_of_range("value");
}
}
@@ -469,12 +562,13 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags2>::ToString(NPCFlags2 value)
case UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR: return { "UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR", "is contribution collector", "" };
case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return { "UNIT_NPC_FLAG_2_AZERITE_RESPEC", "is azerite respec", "" };
case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return { "UNIT_NPC_FLAG_2_ISLANDS_QUEUE", "is islands queue", "" };
+ case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return { "UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION", "UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION", "" };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 12; }
+TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 13; }
template <>
TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index)
@@ -493,6 +587,7 @@ TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index)
case 9: return UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR;
case 10: return UNIT_NPC_FLAG_2_AZERITE_RESPEC;
case 11: return UNIT_NPC_FLAG_2_ISLANDS_QUEUE;
+ case 12: return UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION;
default: throw std::out_of_range("index");
}
}
@@ -514,6 +609,7 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags2>::ToIndex(NPCFlags2 value)
case UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR: return 9;
case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return 10;
case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return 11;
+ case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return 12;
default: throw std::out_of_range("value");
}
}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 9bc8834c5bf..89129702089 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -555,7 +555,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNULL, //486
&AuraEffect::HandleCosmeticMounted, //487 SPELL_AURA_COSMETIC_MOUNTED
&AuraEffect::HandleNULL, //488
- &AuraEffect::HandleNULL, //489 SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE
+ &AuraEffect::HandleModAlternativeDefaultLanguage, //489 SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE
&AuraEffect::HandleNULL, //490
&AuraEffect::HandleNULL, //491
&AuraEffect::HandleNULL, //492
@@ -4937,6 +4937,24 @@ void AuraEffect::HandleComprehendLanguage(AuraApplication const* aurApp, uint8 m
}
}
+void AuraEffect::HandleModAlternativeDefaultLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const
+{
+ if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK))
+ return;
+
+ Unit* target = aurApp->GetTarget();
+
+ if (apply)
+ target->SetUnitFlag3(UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE);
+ else
+ {
+ if (target->HasAuraType(GetAuraType()))
+ return;
+
+ target->RemoveUnitFlag3(UNIT_FLAG3_ALTERNATIVE_DEFAULT_LANGUAGE);
+ }
+}
+
void AuraEffect::HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, bool apply) const
{
Unit* target = aurApp->GetTarget();
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 8ed3ef13e41..8e8bc66f59c 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -300,6 +300,7 @@ class TC_GAME_API AuraEffect
void HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleLearnSpell(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleComprehendLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const;
+ void HandleModAlternativeDefaultLanguage(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleAuraLinked(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleAuraOpenStable(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleAuraModFakeInebriation(AuraApplication const* aurApp, uint8 mode, bool apply) const;
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 89f49b6fa41..be05e786856 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -4824,10 +4824,12 @@ class spell_gen_war_mode_enlisted : public AuraScript
switch (target->GetTeamId())
{
case TEAM_ALLIANCE:
- amount = sWorldStateMgr->GetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, nullptr);
+ amount = sWorldStateMgr->GetValue(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, target->GetMap());
break;
case TEAM_HORDE:
- amount = sWorldStateMgr->GetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, nullptr);
+ amount = sWorldStateMgr->GetValue(WS_WAR_MODE_HORDE_BUFF_VALUE, target->GetMap());
+ break;
+ default:
break;
}
}