private void RegroupTargetsByID(ushort id, AgentData agentData, List <CombatItem> combatItems) { List <AgentItem> agents = agentData.GetAgentsByID(id); if (agents.Count > 1) { AgentItem firstItem = agents.First(); HashSet <ulong> agentValues = new HashSet <ulong>(agents.Select(x => x.Agent)); AgentItem newTargetAgent = new AgentItem(firstItem) { FirstAwareLogTime = agents.Min(x => x.FirstAwareLogTime), LastAwareLogTime = agents.Max(x => x.LastAwareLogTime) }; // get unique id for the fusion ushort instID = 0; Random rnd = new Random(); while (agentData.InstIDValues.Contains(instID) || instID == 0) { instID = (ushort)rnd.Next(ushort.MaxValue / 2, ushort.MaxValue); } newTargetAgent.InstID = instID; agentData.OverrideID(id, newTargetAgent); foreach (CombatItem c in combatItems) { if (agentValues.Contains(c.SrcAgent)) { c.OverrideSrcValues(newTargetAgent.Agent, newTargetAgent.InstID); } if (agentValues.Contains(c.DstAgent)) { c.OverrideDstValues(newTargetAgent.Agent, newTargetAgent.InstID); } } } }
private static void RegroupTargetsByID(int id, AgentData agentData, List <CombatItem> combatItems) { 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), firstItem); agentData.OverrideID(id, newTargetAgent); foreach (CombatItem c in combatItems) { if (agentValues.Contains(c.SrcAgent) && c.IsStateChange.SrcIsAgent()) { c.OverrideSrcAgent(newTargetAgent.Agent); } if (agentValues.Contains(c.DstAgent) && c.IsStateChange.DstIsAgent()) { c.OverrideDstAgent(newTargetAgent.Agent); } } } }
protected void RegroupTargetsByID(ushort id, AgentData agentData, List <CombatItem> combatItems) { List <AgentItem> agents = agentData.GetAgentsByID(id); List <Boss> toRegroup = Targets.Where(x => x.ID == id).ToList(); if (agents.Count > 0 && toRegroup.Count > 0) { Targets.RemoveAll(x => x.ID == id); AgentItem firstItem = agents.First(); agents = agents.Where(x => x.InstID == firstItem.InstID).ToList(); HashSet <ulong> agentValues = new HashSet <ulong>(agents.Select(x => x.Agent)); agentValues.Remove(firstItem.Agent); AgentItem newTargetAgent = new AgentItem(firstItem) { FirstAware = agents.Min(x => x.FirstAware), LastAware = agents.Max(x => x.LastAware) }; agentData.OverrideID(id, firstItem.InstID, newTargetAgent); Targets.Add(new Boss(newTargetAgent)); if (agentValues.Count == 0) { return; } foreach (CombatItem c in combatItems) { if (agentValues.Contains(c.SrcAgent)) { c.SrcAgent = newTargetAgent.Agent; } if (agentValues.Contains(c.DstAgent)) { c.DstAgent = newTargetAgent.Agent; } } } }