aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.h6
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h5
-rw-r--r--src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp53
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp4
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp20
7 files changed, 58 insertions, 36 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 86585a35452..32690e08bff 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1125,7 +1125,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, Posit
LastUsedScriptID = GetScriptId();
- if (IsSpiritHealer() || IsSpiritGuide() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GHOST_VISIBILITY))
+ if (IsSpiritHealer() || IsAreaSpiritHealer() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GHOST_VISIBILITY))
{
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index bd5a69bd878..55b922489e2 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -7902,8 +7902,8 @@ bool Unit::IsServiceProvider() const
return HasNpcFlag(
UNIT_NPC_FLAG_VENDOR | UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_FLIGHTMASTER |
UNIT_NPC_FLAG_PETITIONER | UNIT_NPC_FLAG_BATTLEMASTER | UNIT_NPC_FLAG_BANKER |
- UNIT_NPC_FLAG_INNKEEPER | UNIT_NPC_FLAG_SPIRITHEALER |
- UNIT_NPC_FLAG_SPIRITGUIDE | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER);
+ UNIT_NPC_FLAG_INNKEEPER | UNIT_NPC_FLAG_SPIRIT_HEALER |
+ UNIT_NPC_FLAG_AREA_SPIRIT_HEALER | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER);
}
void Unit::EngageWithTarget(Unit* enemy)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 6fb9b7c0894..9fcb05b9ab1 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1112,14 +1112,14 @@ class TC_GAME_API Unit : public WorldObject
bool IsBattleMaster() const { return HasNpcFlag(UNIT_NPC_FLAG_BATTLEMASTER); }
bool IsBanker() const { return HasNpcFlag(UNIT_NPC_FLAG_BANKER); }
bool IsInnkeeper() const { return HasNpcFlag(UNIT_NPC_FLAG_INNKEEPER); }
- bool IsSpiritHealer() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITHEALER); }
- bool IsSpiritGuide() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITGUIDE); }
+ bool IsSpiritHealer() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRIT_HEALER); }
+ bool IsAreaSpiritHealer() const { return HasNpcFlag(UNIT_NPC_FLAG_AREA_SPIRIT_HEALER); }
bool IsTabardDesigner() const { return HasNpcFlag(UNIT_NPC_FLAG_TABARDDESIGNER); }
bool IsAuctioner() const { return HasNpcFlag(UNIT_NPC_FLAG_AUCTIONEER); }
bool IsArmorer() const { return HasNpcFlag(UNIT_NPC_FLAG_REPAIR); }
bool IsWildBattlePet() const { return HasNpcFlag(UNIT_NPC_FLAG_WILD_BATTLE_PET); }
bool IsServiceProvider() const;
- bool IsSpiritService() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE); }
+ bool IsSpiritService() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRIT_HEALER | UNIT_NPC_FLAG_AREA_SPIRIT_HEALER); }
bool IsCritter() const { return GetCreatureType() == CREATURE_TYPE_CRITTER; }
bool IsInFlight() const { return HasUnitState(UNIT_STATE_IN_FLIGHT); }
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index e7ffd0250ef..5a37cc4e109 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -303,8 +303,8 @@ enum NPCFlags : uint32
UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // TITLE is vendor (reagents) DESCRIPTION 100%
UNIT_NPC_FLAG_REPAIR = 0x00001000, // TITLE can repair DESCRIPTION 100%
UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // TITLE is flight master DESCRIPTION 100%
- UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // TITLE is spirit healer DESCRIPTION guessed
- UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // TITLE is spirit guide DESCRIPTION guessed
+ UNIT_NPC_FLAG_SPIRIT_HEALER = 0x00004000, // TITLE is spirit healer
+ UNIT_NPC_FLAG_AREA_SPIRIT_HEALER = 0x00008000, // TITLE is area spirit healer
UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // TITLE is innkeeper
UNIT_NPC_FLAG_BANKER = 0x00020000, // TITLE is banker DESCRIPTION 100%
UNIT_NPC_FLAG_PETITIONER = 0x00040000, // TITLE handles guild/arena petitions DESCRIPTION 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
@@ -332,6 +332,7 @@ enum NPCFlags2 : uint32
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_AREA_SPIRIT_HEALER_INDIVIDUAL = 0x00000008, // TITLE is area spirit healer individual DESCRIPTION area spirit healer with individual timers
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
diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
index 328c08fc79d..3c870223ffc 100644
--- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
+++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
@@ -433,8 +433,8 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags>::ToString(NPCFlags value)
case UNIT_NPC_FLAG_VENDOR_REAGENT: return { "UNIT_NPC_FLAG_VENDOR_REAGENT", "is vendor (reagents)", "100%" };
case UNIT_NPC_FLAG_REPAIR: return { "UNIT_NPC_FLAG_REPAIR", "can repair", "100%" };
case UNIT_NPC_FLAG_FLIGHTMASTER: return { "UNIT_NPC_FLAG_FLIGHTMASTER", "is flight master", "100%" };
- case UNIT_NPC_FLAG_SPIRITHEALER: return { "UNIT_NPC_FLAG_SPIRITHEALER", "is spirit healer", "guessed" };
- case UNIT_NPC_FLAG_SPIRITGUIDE: return { "UNIT_NPC_FLAG_SPIRITGUIDE", "is spirit guide", "guessed" };
+ case UNIT_NPC_FLAG_SPIRIT_HEALER: return { "UNIT_NPC_FLAG_SPIRIT_HEALER", "is spirit healer", "" };
+ case UNIT_NPC_FLAG_AREA_SPIRIT_HEALER: return { "UNIT_NPC_FLAG_AREA_SPIRIT_HEALER", "is area spirit healer", "" };
case UNIT_NPC_FLAG_INNKEEPER: return { "UNIT_NPC_FLAG_INNKEEPER", "is innkeeper", "" };
case UNIT_NPC_FLAG_BANKER: return { "UNIT_NPC_FLAG_BANKER", "is banker", "100%" };
case UNIT_NPC_FLAG_PETITIONER: return { "UNIT_NPC_FLAG_PETITIONER", "handles guild/arena petitions", "100% 0xC0000 = guild petitions, 0x40000 = arena team petitions" };
@@ -478,8 +478,8 @@ TC_API_EXPORT NPCFlags EnumUtils<NPCFlags>::FromIndex(size_t index)
case 12: return UNIT_NPC_FLAG_VENDOR_REAGENT;
case 13: return UNIT_NPC_FLAG_REPAIR;
case 14: return UNIT_NPC_FLAG_FLIGHTMASTER;
- case 15: return UNIT_NPC_FLAG_SPIRITHEALER;
- case 16: return UNIT_NPC_FLAG_SPIRITGUIDE;
+ case 15: return UNIT_NPC_FLAG_SPIRIT_HEALER;
+ case 16: return UNIT_NPC_FLAG_AREA_SPIRIT_HEALER;
case 17: return UNIT_NPC_FLAG_INNKEEPER;
case 18: return UNIT_NPC_FLAG_BANKER;
case 19: return UNIT_NPC_FLAG_PETITIONER;
@@ -520,8 +520,8 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags>::ToIndex(NPCFlags value)
case UNIT_NPC_FLAG_VENDOR_REAGENT: return 12;
case UNIT_NPC_FLAG_REPAIR: return 13;
case UNIT_NPC_FLAG_FLIGHTMASTER: return 14;
- case UNIT_NPC_FLAG_SPIRITHEALER: return 15;
- case UNIT_NPC_FLAG_SPIRITGUIDE: return 16;
+ case UNIT_NPC_FLAG_SPIRIT_HEALER: return 15;
+ case UNIT_NPC_FLAG_AREA_SPIRIT_HEALER: return 16;
case UNIT_NPC_FLAG_INNKEEPER: return 17;
case UNIT_NPC_FLAG_BANKER: return 18;
case UNIT_NPC_FLAG_PETITIONER: return 19;
@@ -554,6 +554,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags2>::ToString(NPCFlags2 value)
case UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER: return { "UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER", "is item upgrade", "" };
case UNIT_NPC_FLAG_2_GARRISON_ARCHITECT: return { "UNIT_NPC_FLAG_2_GARRISON_ARCHITECT", "is garrison architect", "garrison building placement UI" };
case UNIT_NPC_FLAG_2_STEERING: return { "UNIT_NPC_FLAG_2_STEERING", "is avoiding obstacles", "clientside pathfinding" };
+ case UNIT_NPC_FLAG_2_AREA_SPIRIT_HEALER_INDIVIDUAL: return { "UNIT_NPC_FLAG_2_AREA_SPIRIT_HEALER_INDIVIDUAL", "is area spirit healer individual", "area spirit healer with individual timers" };
case UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER: return { "UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER", "is shipment crafter", "garrison work orders" };
case UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC: return { "UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC", "is garrison mission", "" };
case UNIT_NPC_FLAG_2_TRADESKILL_NPC: return { "UNIT_NPC_FLAG_2_TRADESKILL_NPC", "is tradeskill", "crafting at npc" };
@@ -568,7 +569,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags2>::ToString(NPCFlags2 value)
}
template <>
-TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 13; }
+TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 14; }
template <>
TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index)
@@ -579,15 +580,16 @@ TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index)
case 1: return UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER;
case 2: return UNIT_NPC_FLAG_2_GARRISON_ARCHITECT;
case 3: return UNIT_NPC_FLAG_2_STEERING;
- case 4: return UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER;
- case 5: return UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC;
- case 6: return UNIT_NPC_FLAG_2_TRADESKILL_NPC;
- case 7: return UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW;
- case 8: return UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC;
- 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;
+ case 4: return UNIT_NPC_FLAG_2_AREA_SPIRIT_HEALER_INDIVIDUAL;
+ case 5: return UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER;
+ case 6: return UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC;
+ case 7: return UNIT_NPC_FLAG_2_TRADESKILL_NPC;
+ case 8: return UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW;
+ case 9: return UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC;
+ case 10: return UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR;
+ case 11: return UNIT_NPC_FLAG_2_AZERITE_RESPEC;
+ case 12: return UNIT_NPC_FLAG_2_ISLANDS_QUEUE;
+ case 13: return UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION;
default: throw std::out_of_range("index");
}
}
@@ -601,15 +603,16 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags2>::ToIndex(NPCFlags2 value)
case UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER: return 1;
case UNIT_NPC_FLAG_2_GARRISON_ARCHITECT: return 2;
case UNIT_NPC_FLAG_2_STEERING: return 3;
- case UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER: return 4;
- case UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC: return 5;
- case UNIT_NPC_FLAG_2_TRADESKILL_NPC: return 6;
- case UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW: return 7;
- case UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC: return 8;
- 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;
+ case UNIT_NPC_FLAG_2_AREA_SPIRIT_HEALER_INDIVIDUAL: return 4;
+ case UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER: return 5;
+ case UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC: return 6;
+ case UNIT_NPC_FLAG_2_TRADESKILL_NPC: return 7;
+ case UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW: return 8;
+ case UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC: return 9;
+ case UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR: return 10;
+ case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return 11;
+ case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return 12;
+ case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return 13;
default: throw std::out_of_range("value");
}
}
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 23249272a41..5f706002ec4 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -168,7 +168,7 @@ void WorldSession::HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet)
unit->SetHomePosition(unit->GetPosition());
// If spiritguide, no need for gossip menu, just put player into resurrect queue
- if (unit->IsSpiritGuide())
+ if (unit->IsAreaSpiritHealer())
{
Battleground* bg = _player->GetBattleground();
if (bg)
@@ -271,7 +271,7 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelec
void WorldSession::HandleSpiritHealerActivate(WorldPackets::NPC::SpiritHealerActivate& packet)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Healer, UNIT_NPC_FLAG_SPIRITHEALER, UNIT_NPC_FLAG_2_NONE);
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Healer, UNIT_NPC_FLAG_SPIRIT_HEALER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
TC_LOG_DEBUG("network", "WORLD: HandleSpiritHealerActivateOpcode - {} not found or you can not interact with him.", packet.Healer.ToString());
diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
index fd36c97078b..889f42f200a 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -127,12 +127,18 @@ TC_API_EXPORT EnumText EnumUtils<Powers>::ToString(Powers value)
case POWER_FURY: return { "POWER_FURY", "Fury", "" };
case POWER_PAIN: return { "POWER_PAIN", "Pain", "" };
case POWER_ESSENCE: return { "POWER_ESSENCE", "Essence", "" };
+ case POWER_RUNE_BLOOD: return { "POWER_RUNE_BLOOD", "Blood Runes", "" };
+ case POWER_RUNE_FROST: return { "POWER_RUNE_FROST", "Frost Runes", "" };
+ case POWER_RUNE_UNHOLY: return { "POWER_RUNE_UNHOLY", "Unholy Runes", "" };
+ case POWER_ALTERNATE_QUEST: return { "POWER_ALTERNATE_QUEST", "Alternate (Quest)", "" };
+ case POWER_ALTERNATE_ENCOUNTER: return { "POWER_ALTERNATE_ENCOUNTER", "Alternate (Encounter)", "" };
+ case POWER_ALTERNATE_MOUNT: return { "POWER_ALTERNATE_MOUNT", "Alternate (Mount)", "" };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<Powers>::Count() { return 21; }
+TC_API_EXPORT size_t EnumUtils<Powers>::Count() { return 27; }
template <>
TC_API_EXPORT Powers EnumUtils<Powers>::FromIndex(size_t index)
@@ -160,6 +166,12 @@ TC_API_EXPORT Powers EnumUtils<Powers>::FromIndex(size_t index)
case 18: return POWER_FURY;
case 19: return POWER_PAIN;
case 20: return POWER_ESSENCE;
+ case 21: return POWER_RUNE_BLOOD;
+ case 22: return POWER_RUNE_FROST;
+ case 23: return POWER_RUNE_UNHOLY;
+ case 24: return POWER_ALTERNATE_QUEST;
+ case 25: return POWER_ALTERNATE_ENCOUNTER;
+ case 26: return POWER_ALTERNATE_MOUNT;
default: throw std::out_of_range("index");
}
}
@@ -190,6 +202,12 @@ TC_API_EXPORT size_t EnumUtils<Powers>::ToIndex(Powers value)
case POWER_FURY: return 18;
case POWER_PAIN: return 19;
case POWER_ESSENCE: return 20;
+ case POWER_RUNE_BLOOD: return 21;
+ case POWER_RUNE_FROST: return 22;
+ case POWER_RUNE_UNHOLY: return 23;
+ case POWER_ALTERNATE_QUEST: return 24;
+ case POWER_ALTERNATE_ENCOUNTER: return 25;
+ case POWER_ALTERNATE_MOUNT: return 26;
default: throw std::out_of_range("value");
}
}