From 464aa0b7911f6ce5196e1a847cf0d7a2198c1153 Mon Sep 17 00:00:00 2001
From: Image <>
Date: Sat, 11 Jul 2020 16:43:13 -0400
Subject: [PATCH] Support for group and self targetting for spells like
 shadowsight

Fix #147
---
 EQ2/source/WorldServer/SpellProcess.cpp | 10 ++++++----
 EQ2/source/WorldServer/SpellProcess.h   |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/EQ2/source/WorldServer/SpellProcess.cpp b/EQ2/source/WorldServer/SpellProcess.cpp
index 8eaa3e9d1..3da3789f3 100644
--- a/EQ2/source/WorldServer/SpellProcess.cpp
+++ b/EQ2/source/WorldServer/SpellProcess.cpp
@@ -1727,7 +1727,7 @@ void SpellProcess::GetSpellTargets(LuaSpell* luaspell)
 					if ((target->IsPlayer() && luaspell->caster->IsPlayer() && target != luaspell->caster && ((Player*)target)->GetGroupMemberInfo() != NULL && ((Player*)luaspell->caster)->GetGroupMemberInfo() != NULL
 						&& ((Player*)target)->GetGroupMemberInfo()->group_id == ((Player*)luaspell->caster)->GetGroupMemberInfo()->group_id))
 					{
-
+						GetPlayerGroupTargets((Player*)target, caster, luaspell, true, false);
 					}//TODO: NEED RAID SUPPORT
 
 					// NPC LOGIC:
@@ -1737,7 +1737,9 @@ void SpellProcess::GetSpellTargets(LuaSpell* luaspell)
 					}
 					else
 					{
+						// add self
 						target = NULL;
+						luaspell->targets.push_back(caster->GetID());
 						luaspell->initial_target = 0;
 					}
 				}
@@ -2012,9 +2014,9 @@ void SpellProcess::GetSpellTargets(LuaSpell* luaspell)
 		LogWrite(SPELL__WARNING, 0, "Spell", "Warning in %s: Size of targets array is %u", __FUNCTION__, luaspell->targets.size());
 }
 
-void SpellProcess::GetPlayerGroupTargets(Player* target, Spawn* caster, LuaSpell* luaspell)
+void SpellProcess::GetPlayerGroupTargets(Player* target, Spawn* caster, LuaSpell* luaspell, bool bypassSpellChecks, bool bypassRangeChecks)
 {
-	if (luaspell->spell->GetSpellData()->group_spell > 0 || luaspell->spell->GetSpellData()->icon_backdrop == 312)
+	if (bypassSpellChecks || luaspell->spell->GetSpellData()->group_spell > 0 || luaspell->spell->GetSpellData()->icon_backdrop == 312)
 	{
 		if (((Player*)target)->GetGroupMemberInfo())
 		{
@@ -2028,7 +2030,7 @@ void SpellProcess::GetPlayerGroupTargets(Player* target, Spawn* caster, LuaSpell
 					continue;
 				else if (info && info->client &&
 					info->client->GetPlayer()->GetZone() == ((Player*)target)->GetZone() && info->client->GetPlayer()->Alive()
-					&& caster->GetDistance((Entity*)info->client->GetPlayer()) <= luaspell->spell->GetSpellData()->range)
+					&& (bypassRangeChecks || caster->GetDistance((Entity*)info->client->GetPlayer()) <= luaspell->spell->GetSpellData()->range))
 				{
 					luaspell->targets.push_back(info->client->GetPlayer()->GetID());
 				}
diff --git a/EQ2/source/WorldServer/SpellProcess.h b/EQ2/source/WorldServer/SpellProcess.h
index b0abd1397..96a49ef2f 100644
--- a/EQ2/source/WorldServer/SpellProcess.h
+++ b/EQ2/source/WorldServer/SpellProcess.h
@@ -328,7 +328,7 @@ public:
 	/// <param name='luaspell'>LuaSpell to get the targets for</param>
 	static void GetSpellTargets(LuaSpell* luaspell);
 
-	static void GetPlayerGroupTargets(Player* target, Spawn* caster, LuaSpell* luaspell);
+	static void GetPlayerGroupTargets(Player* target, Spawn* caster, LuaSpell* luaspell, bool bypassSpellChecks=false, bool bypassRangeChecks=false);
 
 	/// <summary>Gets targets for a true aoe spell (not an encounter ae) and adds them to the LuaSpell targets array</summary>
 	/// <param name='luaspell'>LuaSpell to get the targets for</param>