Пример #1
0
        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;
                    }
                }
            }
        }