Browse Source

PVP AE Player Group support

Image 4 years ago
parent
commit
9c71a0ebe0
2 changed files with 30 additions and 0 deletions
  1. 28 0
      EQ2/source/WorldServer/SpellProcess.cpp
  2. 2 0
      EQ2/source/WorldServer/SpellProcess.h

+ 28 - 0
EQ2/source/WorldServer/SpellProcess.cpp

@@ -1677,12 +1677,15 @@ void SpellProcess::GetSpellTargets(LuaSpell* luaspell)
 								implied = true;
 								luaspell->initial_target = target->GetID();
 								luaspell->targets.push_back(target->GetID());
+								GetPlayerGroupTargets((Player*)target, caster, luaspell);
+
 							}
 							else if (target->IsPlayer() && ((Entity*)caster)->AttackAllowed((Entity*)secondary_target))
 							{
 								implied = true;
 								luaspell->initial_target = secondary_target->GetID();
 								luaspell->targets.push_back(secondary_target->GetID());
+								GetPlayerGroupTargets((Player*)secondary_target, caster, luaspell);
 							}
 						}
 					} // end friendly spell check
@@ -1963,6 +1966,31 @@ 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)
+{
+	if (luaspell->spell->GetSpellData()->group_spell > 0 || luaspell->spell->GetSpellData()->icon_backdrop == 312)
+	{
+		if (((Player*)target)->GetGroupMemberInfo())
+		{
+			deque<GroupMemberInfo*>* members = world.GetGroupManager()->GetGroupMembers(((Player*)target)->GetGroupMemberInfo()->group_id);
+			deque<GroupMemberInfo*>::iterator itr;
+			GroupMemberInfo* info = 0;
+
+			for (itr = members->begin(); itr != members->end(); itr++) {
+				info = *itr;
+				if (info == ((Player*)target)->GetGroupMemberInfo())
+					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)
+				{
+					luaspell->targets.push_back(info->client->GetPlayer()->GetID());
+				}
+			}
+		}
+	}
+}
+
 void SpellProcess::GetSpellTargetsTrueAOE(LuaSpell* luaspell) {
 	if (luaspell && luaspell->caster && luaspell->spell && luaspell->spell->GetSpellData()->max_aoe_targets > 0) {
 		if (luaspell->caster->HasTarget() && luaspell->caster->GetTarget() != luaspell->caster){

+ 2 - 0
EQ2/source/WorldServer/SpellProcess.h

@@ -328,6 +328,8 @@ 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);
+
 	/// <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>
 	static void GetSpellTargetsTrueAOE(LuaSpell* luaspell);