diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-03-28 18:20:57 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-03-28 20:22:05 +0200 |
commit | 2398c1e23c57cf5b6ac778b09a09d28e2704fd75 (patch) | |
tree | 9ed1ea8c9ac016a64937032fec2339ca279a13c6 /src | |
parent | 46a81ea1f440b91611bc7b849ac09d523a041878 (diff) |
Core/Spells: Implemented SUMMON_PROP_FLAG_PERSONAL_GROUP_SPAWN
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 17 |
5 files changed, 34 insertions, 5 deletions
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 920e88ddbbf..537cc256c07 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1431,7 +1431,7 @@ enum SummonPropFlags SUMMON_PROP_FLAG_UNK2 = 0x00000002, // 616 spells in 3.0.3, something friendly SUMMON_PROP_FLAG_UNK3 = 0x00000004, // 22 spells in 3.0.3, no idea... SUMMON_PROP_FLAG_UNK4 = 0x00000008, // 49 spells in 3.0.3, some mounts - SUMMON_PROP_FLAG_PERSONAL_SPAWN = 0x00000010, // Personal Spawn (creature visible only by summoner) + SUMMON_PROP_FLAG_PERSONAL_SPAWN = 0x00000010, // Only Visible to Summoner SUMMON_PROP_FLAG_UNK6 = 0x00000020, // 0 spells in 3.3.5, unused SUMMON_PROP_FLAG_UNK7 = 0x00000040, // 12 spells in 3.0.3, no idea SUMMON_PROP_FLAG_UNK8 = 0x00000080, // 4 spells in 3.0.3, no idea @@ -1443,7 +1443,7 @@ enum SummonPropFlags SUMMON_PROP_FLAG_UNK14 = 0x00002000, // Guides, player follows SUMMON_PROP_FLAG_UNK15 = 0x00004000, // Force of Nature, Shadowfiend, Feral Spirit, Summon Water Elemental SUMMON_PROP_FLAG_UNK16 = 0x00008000, // Light/Dark Bullet, Soul/Fiery Consumption, Twisted Visage, Twilight Whelp. Phase related? - SUMMON_PROP_FLAG_UNK17 = 0x00010000, + SUMMON_PROP_FLAG_PERSONAL_GROUP_SPAWN = 0x00010000, // Only Visible to Summoner's Group SUMMON_PROP_FLAG_UNK18 = 0x00020000, SUMMON_PROP_FLAG_UNK19 = 0x00040000, SUMMON_PROP_FLAG_UNK20 = 0x00080000, diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 9ddf63b99f9..01ade19f1d4 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1424,6 +1424,10 @@ bool WorldObject::CheckPrivateObjectOwnerVisibility(WorldObject const* seer) con if (_privateObjectOwner == seer->GetPrivateObjectOwner()) return true; + if (Player const* playerSeer = seer->ToPlayer()) + if (playerSeer->IsInGroup(_privateObjectOwner)) + return true; + return false; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8413516bf78..e0e75e06f4a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -24403,6 +24403,19 @@ void Player::ClearComboPoints() SetPower(POWER_COMBO_POINTS, 0); } +bool Player::IsInGroup(ObjectGuid groupGuid) const +{ + if (Group const* group = GetGroup()) + if (group->GetGUID() == groupGuid) + return true; + + if (Group const* group = GetOriginalGroup()) + if (group->GetGUID() == groupGuid) + return true; + + return false; +} + void Player::SetGroup(Group* group, int8 subgroup) { if (group == nullptr) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 13114628a13..bf512a63fd0 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2334,6 +2334,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> /*** GROUP SYSTEM ***/ /*********************************************************/ + bool IsInGroup(ObjectGuid groupGuid) const; Group* GetGroupInvite() const { return m_groupInvite; } void SetGroupInvite(Group* group) { m_groupInvite = group; } Group* GetGroup() { return m_group.getTarget(); } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 8b835717872..619297d91ed 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1892,9 +1892,20 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) if (!m_originalCaster) return; - ObjectGuid privateObjectOwner; - if (properties->Flags & SUMMON_PROP_FLAG_PERSONAL_SPAWN) - privateObjectOwner = m_originalCaster->IsPrivateObject() ? m_originalCaster->GetPrivateObjectOwner() : m_originalCaster->GetGUID(); + ObjectGuid privateObjectOwner = [&]() + { + if (!(properties->Flags & (SUMMON_PROP_FLAG_PERSONAL_SPAWN | SUMMON_PROP_FLAG_PERSONAL_GROUP_SPAWN))) + return ObjectGuid::Empty; + + if (m_originalCaster->IsPrivateObject()) + return m_originalCaster->GetPrivateObjectOwner(); + + if (properties->Flags & SUMMON_PROP_FLAG_PERSONAL_GROUP_SPAWN) + if (m_originalCaster->IsPlayer() && m_originalCaster->ToPlayer()->GetGroup()) + return m_originalCaster->ToPlayer()->GetGroup()->GetGUID(); + + return m_originalCaster->GetGUID(); + }(); int32 duration = m_spellInfo->CalcDuration(m_originalCaster); |