private static void RegroupTargetsByID(int id, AgentData agentData, List <CombatItem> combatItems, IReadOnlyDictionary <uint, AbstractExtensionHandler> extensions) { IReadOnlyList <AgentItem> agents = agentData.GetNPCsByID(id); if (agents.Count > 1) { AgentItem firstItem = agents.First(); var agentValues = new HashSet <ulong>(agents.Select(x => x.Agent)); var newTargetAgent = new AgentItem(firstItem); newTargetAgent.OverrideAwareTimes(agents.Min(x => x.FirstAware), agents.Max(x => x.LastAware)); agentData.SwapMasters(new HashSet <AgentItem>(agents), newTargetAgent); agentData.ReplaceAgentsFromID(newTargetAgent); foreach (CombatItem c in combatItems) { if (agentValues.Contains(c.SrcAgent) && c.SrcIsAgent(extensions)) { c.OverrideSrcAgent(newTargetAgent.Agent); } if (agentValues.Contains(c.DstAgent) && c.DstIsAgent(extensions)) { c.OverrideDstAgent(newTargetAgent.Agent); } } } }