diff options
-rw-r--r-- | src/server/game/Entities/Unit/UnitDefines.h | 71 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp | 106 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 6 |
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; } } |