Core/Spells: Implemented SUMMON_PROP_FLAG_PERSONAL_GROUP_SPAWN

Port From (https://github.com/TrinityCore/TrinityCore/commit/2398c1e23c57cf5b6ac778b09a09d28e2704fd75)
This commit is contained in:
hondacrx
2021-03-29 17:47:18 -04:00
parent c1c9dbb762
commit 6b455863b5
4 changed files with 32 additions and 5 deletions
+2 -2
View File
@@ -1725,7 +1725,7 @@ namespace Framework.Constants
Unk2 = 0x00000002, // 616 Spells In 3.0.3, Something Friendly
Unk3 = 0x00000004, // 22 Spells In 3.0.3, No Idea...
Unk4 = 0x00000008, // 49 Spells In 3.0.3, Some Mounts
PersonalSpawn = 0x00000010, // Personal Spawn (Creature Visible Only By Summoner)
PersonalSpawn = 0x00000010, // Only Visible to Summoner
Unk6 = 0x00000020, // 0 Spells In 3.3.5, Unused
Unk7 = 0x00000040, // 12 Spells In 3.0.3, No Idea
Unk8 = 0x00000080, // 4 Spells In 3.0.3, No Idea
@@ -1737,7 +1737,7 @@ namespace Framework.Constants
Unk14 = 0x00002000, // Guides, Player Follows
Unk15 = 0x00004000, // Force Of Nature, Shadowfiend, Feral Spirit, Summon Water Elemental
Unk16 = 0x00008000, // Light/Dark Bullet, Soul/Fiery Consumption, Twisted Visage, Twilight Whelp. Phase Related?
Unk17 = 0x00010000,
PersonalGroupSpawn = 0x00010000, // Only Visible to Summoner's Group
Unk18 = 0x00020000,
Unk19 = 0x00040000,
Unk20 = 0x00080000,
@@ -1113,6 +1113,11 @@ namespace Game.Entities
if (_privateObjectOwner == seer.GetPrivateObjectOwner())
return true;
Player playerSeer = seer.ToPlayer();
if (playerSeer != null)
if (playerSeer.IsInGroup(_privateObjectOwner))
return true;
return false;
}
@@ -149,6 +149,21 @@ namespace Game.Entities
}
}
public bool IsInGroup(ObjectGuid groupGuid)
{
Group group = GetGroup();
if (group != null)
if (group.GetGUID() == groupGuid)
return true;
Group originalGroup = GetOriginalGroup();
if (originalGroup != null)
if (originalGroup.GetGUID() == groupGuid)
return true;
return false;
}
public void SetGroup(Group group, byte subgroup = 0)
{
if (!group)
+10 -3
View File
@@ -1595,9 +1595,16 @@ namespace Game.Spells
if (m_originalCaster == null)
return;
ObjectGuid privateObjectOwner = ObjectGuid.Empty;
if (properties.Flags.HasAnyFlag(SummonPropFlags.PersonalSpawn))
privateObjectOwner = m_originalCaster.IsPrivateObject() ? m_originalCaster.GetPrivateObjectOwner() : m_originalCaster.GetGUID();
ObjectGuid privateObjectOwner = m_originalCaster.GetGUID();
if (!properties.Flags.HasAnyFlag(SummonPropFlags.PersonalSpawn | SummonPropFlags.PersonalGroupSpawn))
privateObjectOwner = ObjectGuid.Empty;
if (m_originalCaster.IsPrivateObject())
privateObjectOwner = m_originalCaster.GetPrivateObjectOwner();
if (properties.Flags.HasAnyFlag(SummonPropFlags.PersonalGroupSpawn))
if (m_originalCaster.IsPlayer() && m_originalCaster.ToPlayer().GetGroup())
privateObjectOwner = m_originalCaster.ToPlayer().GetGroup().GetGUID();
int duration = m_spellInfo.CalcDuration(m_originalCaster);