public static void AttachMasterToRangerGadgets(List <Player> players, Dictionary <long, List <AbstractDamageEvent> > damageData, Dictionary <long, List <AbstractCastEvent> > castData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));
            // entangle works fine already
            HashSet <AgentItem> jacarandaEmbraces = ProfHelper.GetOffensiveGadgetAgents(damageData, 1286, playerAgents);
            HashSet <AgentItem> blackHoles        = ProfHelper.GetOffensiveGadgetAgents(damageData, 31436, playerAgents);
            var rangers = players.Where(x => x.Prof == "Ranger" || x.Prof == "Soulbeast" || x.Prof == "Druid").ToList();

            // if only one ranger, could only be that one
            if (rangers.Count == 1)
            {
                Player ranger = rangers[0];
                ProfHelper.SetGadgetMaster(jacarandaEmbraces, ranger.AgentItem);
                ProfHelper.SetGadgetMaster(blackHoles, ranger.AgentItem);
            }
            else if (rangers.Count > 1)
            {
                ProfHelper.AttachMasterToGadgetByCastData(castData, jacarandaEmbraces, new List <long> {
                    44980
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, blackHoles, new List <long> {
                    31503
                }, 1000);
            }
        }
예제 #2
0
        public static void AttachMasterToRangerGadgets(IReadOnlyList <Player> players, CombatData combatData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));
            // entangle works fine already
            HashSet <AgentItem> jacarandaEmbraces = ProfHelper.GetOffensiveGadgetAgents(combatData, 1286, playerAgents);
            HashSet <AgentItem> blackHoles        = ProfHelper.GetOffensiveGadgetAgents(combatData, 31436, playerAgents);
            var rangers = players.Where(x => x.BaseSpec == Spec.Ranger).ToList();

            // if only one ranger, could only be that one
            if (rangers.Count == 1)
            {
                Player ranger = rangers[0];
                ProfHelper.SetGadgetMaster(jacarandaEmbraces, ranger.AgentItem);
                ProfHelper.SetGadgetMaster(blackHoles, ranger.AgentItem);
            }
            else if (rangers.Count > 1)
            {
                ProfHelper.AttachMasterToGadgetByCastData(combatData, jacarandaEmbraces, new List <long> {
                    44980
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, blackHoles, new List <long> {
                    31503
                }, 1000);
            }
        }
예제 #3
0
 protected override void InitAdditionalCombatReplayData(ParsedEvtcLog log)
 {
     // Fight related stuff
     log.FightData.Logic.ComputePlayerCombatReplayActors(this, log, CombatReplay);
     ProfHelper.ComputeProfessionCombatReplayActors(this, log, CombatReplay);
     if (CombatReplay.Rotations.Any())
     {
         CombatReplay.Decorations.Add(new FacingDecoration(((int)CombatReplay.TimeOffsets.start, (int)CombatReplay.TimeOffsets.end), new AgentConnector(this), CombatReplay.PolledRotations));
     }
 }
        public static void AttachMasterToEngineerTurrets(List<Player> players, Dictionary<long, List<AbstractHealthDamageEvent>> damageData, Dictionary<long, List<AnimatedCastEvent>> castData)
        {
            var playerAgents = new HashSet<AgentItem>(players.Select(x => x.AgentItem));

            HashSet<AgentItem> flameTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, 5903, playerAgents);

            HashSet<AgentItem> rifleTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, 5841, playerAgents);
            rifleTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(damageData, 5875, playerAgents));

            HashSet<AgentItem> netTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, 5896, playerAgents);
            netTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(damageData, 22137, playerAgents));

            HashSet<AgentItem> rocketTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, 6108, playerAgents);
            rocketTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(damageData, 5914, playerAgents));

            HashSet<AgentItem> thumperTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, 5856, playerAgents);
            thumperTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(damageData, 5890, playerAgents));
            // TODO: need ID here
            HashSet<AgentItem> harpoonTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, -1, playerAgents);

            HashSet<AgentItem> healingTurrets = ProfHelper.GetOffensiveGadgetAgents(damageData, 5958, playerAgents);
            healingTurrets.RemoveWhere(x => thumperTurrets.Contains(x) || rocketTurrets.Contains(x) || netTurrets.Contains(x) || rifleTurrets.Contains(x) || flameTurrets.Contains(x) || harpoonTurrets.Contains(x));

            var engineers = players.Where(x => x.Prof == "Engineer" || x.Prof == "Scrapper" || x.Prof == "Holosmith").ToList();
            // if only one engineer, could only be that one
            if (engineers.Count == 1)
            {
                Player engineer = engineers[0];
                ProfHelper.SetGadgetMaster(flameTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(netTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(rocketTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(rifleTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(thumperTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(harpoonTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(healingTurrets, engineer.AgentItem);
            }
            else if (engineers.Count > 1)
            {
                ProfHelper.AttachMasterToGadgetByCastData(castData, flameTurrets, new List<long> { 5836, 5868 }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, rifleTurrets, new List<long> { 5818 }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, netTurrets, new List<long> { 5837, 5868, 6183 }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, rocketTurrets, new List<long> { 5912, 22574, 6183 }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, thumperTurrets, new List<long> { 5838 }, 1000);
                //AttachMasterToGadgetByCastData(castData, harpoonTurrets, new List<long> { 6093, 6183 }, 1000);
                //AttachMasterToGadgetByCastData(castData, healingTurrets, new List<long> { 5857, 5868 }, 1000);
            }
        }
예제 #5
0
        protected override void InitAdditionalCombatReplayData(ParsedEvtcLog log)
        {
            log.FightData.Logic.ComputeNPCCombatReplayActors(this, log, CombatReplay);
            AgentItem master = AgentItem.GetFinalMaster();

            if (CombatReplay.Rotations.Any() && (log.FightData.Logic.TargetAgents.Contains(AgentItem) || log.FriendlyAgents.Contains(AgentItem)))
            {
                CombatReplay.Decorations.Add(new FacingDecoration(((int)CombatReplay.TimeOffsets.start, (int)CombatReplay.TimeOffsets.end), new AgentConnector(this), CombatReplay.PolledRotations));
            }
            if (master != AgentItem)
            {
                AbstractSingleActor masterActor = log.FindActor(master);
                // Basic linkage
                CombatReplay.Decorations.Add(new LineDecoration(0, ((int)CombatReplay.TimeOffsets.start, (int)CombatReplay.TimeOffsets.end), "rgba(0, 255, 0, 0.5)", new AgentConnector(this), new AgentConnector(masterActor)));
                // Prof specific treatment
                ProfHelper.ComputeMinionCombatReplayActors(this, masterActor, log, CombatReplay);
            }
        }
예제 #6
0
        /*private static HashSet<AgentItem> FindBattleStandards(Dictionary<long, List<AbstractBuffEvent>> buffData, HashSet<AgentItem> playerAgents)
         * {
         *  if (buffData.TryGetValue(725, out List<AbstractBuffEvent> list))
         *  {
         *      var battleBannerCandidates = new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By));
         *      if (battleBannerCandidates.Count > 0)
         *      {
         *          if (buffData.TryGetValue(740, out list))
         *          {
         *              battleBannerCandidates.IntersectWith(new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By)));
         *              if (battleBannerCandidates.Count > 0)
         *              {
         *                  if (buffData.TryGetValue(719, out list))
         *                  {
         *                      battleBannerCandidates.IntersectWith(new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By)));
         *                      return battleBannerCandidates;
         *                  }
         *              }
         *          }
         *      }
         *  }
         *  return new HashSet<AgentItem>();
         * }*/

        public static void AttachMasterToWarriorBanners(List <Player> players, Dictionary <long, List <AbstractBuffEvent> > buffData, Dictionary <long, List <AnimatedCastEvent> > castData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));
            HashSet <AgentItem> strBanners = GetBannerAgents(buffData, 14417, playerAgents),
                                defBanners = GetBannerAgents(buffData, 14543, playerAgents),
                                disBanners = GetBannerAgents(buffData, 14449, playerAgents),
                                tacBanners = GetBannerAgents(buffData, 14450, playerAgents);
            //battleBanner = FindBattleStandards(buffData, playerAgents);
            var warriors = players.Where(x => x.Prof == "Warrior" || x.Prof == "Spellbreaker" || x.Prof == "Berserker").ToList();

            // if only one warrior, could only be that one
            if (warriors.Count == 1)
            {
                Player warrior = warriors[0];
                ProfHelper.SetGadgetMaster(strBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(disBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(tacBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(defBanners, warrior.AgentItem);
                //SetBannerMaster(battleBanner, warrior.AgentItem);
            }
            else if (warriors.Count > 1)
            {
                // land and under water cast ids
                ProfHelper.AttachMasterToGadgetByCastData(castData, strBanners, new List <long> {
                    14405, 14572
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, defBanners, new List <long> {
                    14528, 14570
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, disBanners, new List <long> {
                    14407, 14571
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(castData, tacBanners, new List <long> {
                    14408, 14573
                }, 1000);
                //AttachMasterToBanner(castData, battleBanner, 14419, 14569);
            }
        }
예제 #7
0
        /*private static HashSet<AgentItem> FindBattleStandards(Dictionary<long, List<AbstractBuffEvent>> buffData, HashSet<AgentItem> playerAgents)
         * {
         *  if (buffData.TryGetValue(725, out List<AbstractBuffEvent> list))
         *  {
         *      var battleBannerCandidates = new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By));
         *      if (battleBannerCandidates.Count > 0)
         *      {
         *          if (buffData.TryGetValue(740, out list))
         *          {
         *              battleBannerCandidates.IntersectWith(new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By)));
         *              if (battleBannerCandidates.Count > 0)
         *              {
         *                  if (buffData.TryGetValue(719, out list))
         *                  {
         *                      battleBannerCandidates.IntersectWith(new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By)));
         *                      return battleBannerCandidates;
         *                  }
         *              }
         *          }
         *      }
         *  }
         *  return new HashSet<AgentItem>();
         * }*/

        public static void AttachMasterToWarriorBanners(IReadOnlyList <Player> players, CombatData combatData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));
            HashSet <AgentItem> strBanners = GetBannerAgents(combatData, 14417, playerAgents),
                                defBanners = GetBannerAgents(combatData, 14543, playerAgents),
                                disBanners = GetBannerAgents(combatData, 14449, playerAgents),
                                tacBanners = GetBannerAgents(combatData, 14450, playerAgents);
            //battleBanner = FindBattleStandards(buffData, playerAgents);
            var warriors = players.Where(x => x.BaseSpec == Spec.Warrior).ToList();

            // if only one warrior, could only be that one
            if (warriors.Count == 1)
            {
                Player warrior = warriors[0];
                ProfHelper.SetGadgetMaster(strBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(disBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(tacBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(defBanners, warrior.AgentItem);
                //SetBannerMaster(battleBanner, warrior.AgentItem);
            }
            else if (warriors.Count > 1)
            {
                // land and under water cast ids
                ProfHelper.AttachMasterToGadgetByCastData(combatData, strBanners, new List <long> {
                    14405, 14572
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, defBanners, new List <long> {
                    14528, 14570
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, disBanners, new List <long> {
                    14407, 14571
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, tacBanners, new List <long> {
                    14408, 14573
                }, 1000);
                //AttachMasterToBanner(castData, battleBanner, 14419, 14569);
            }
        }
        /*private static HashSet<AgentItem> FindBattleStandards(Dictionary<long, List<AbstractBuffEvent>> buffData, HashSet<AgentItem> playerAgents)
         * {
         *  if (buffData.TryGetValue(725, out List<AbstractBuffEvent> list))
         *  {
         *      var battleBannerCandidates = new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By));
         *      if (battleBannerCandidates.Count > 0)
         *      {
         *          if (buffData.TryGetValue(740, out list))
         *          {
         *              battleBannerCandidates.IntersectWith(new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By)));
         *              if (battleBannerCandidates.Count > 0)
         *              {
         *                  if (buffData.TryGetValue(Swiftness, out list))
         *                  {
         *                      battleBannerCandidates.IntersectWith(new HashSet<AgentItem>(list.Where(x => x is BuffApplyEvent && x.By.Type == AgentItem.AgentType.Gadget && (playerAgents.Contains(x.To) || playerAgents.Contains(x.To.Master))).Select(x => x.By)));
         *                      return battleBannerCandidates;
         *                  }
         *              }
         *          }
         *      }
         *  }
         *  return new HashSet<AgentItem>();
         * }*/

        public static void AttachMasterToWarriorBanners(IReadOnlyList <Player> players, CombatData combatData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));
            HashSet <AgentItem> strBanners = GetBannerAgents(combatData, BannerOfStrengthEffect, playerAgents),
                                defBanners = GetBannerAgents(combatData, BannerOfDefenseEffect, playerAgents),
                                disBanners = GetBannerAgents(combatData, BannerOfDisciplineEffect, playerAgents),
                                tacBanners = GetBannerAgents(combatData, BannerOfTacticsEffect, playerAgents);
            //battleBanner = FindBattleStandards(buffData, playerAgents);
            var warriors = players.Where(x => x.BaseSpec == Spec.Warrior).ToList();

            // if only one warrior, could only be that one
            if (warriors.Count == 1)
            {
                Player warrior = warriors[0];
                ProfHelper.SetGadgetMaster(strBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(disBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(tacBanners, warrior.AgentItem);
                ProfHelper.SetGadgetMaster(defBanners, warrior.AgentItem);
                //SetBannerMaster(battleBanner, warrior.AgentItem);
            }
            else if (warriors.Count > 1)
            {
                // land and under water cast ids
                ProfHelper.AttachMasterToGadgetByCastData(combatData, strBanners, new List <long> {
                    BannerOfStrengthSkill, BannerOfStrengthSkillUW
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, defBanners, new List <long> {
                    BannerOfDefenseSkill, BannerOfDefenseSkillUW
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, disBanners, new List <long> {
                    BannerOfDisciplineSkill, BannerOfDisciplineSkillUW
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, tacBanners, new List <long> {
                    BannerOfTacticsSkill, BannerOfTacticsSkillUW
                }, 1000);
                //AttachMasterToBanner(castData, battleBanner, 14419, 14569);
            }
        }
예제 #9
0
        public static void AttachMasterToEngineerTurrets(IReadOnlyList <Player> players, CombatData combatData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));

            HashSet <AgentItem> flameTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, 5903, playerAgents);

            HashSet <AgentItem> rifleTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, 5841, playerAgents);

            rifleTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, 5875, playerAgents));

            HashSet <AgentItem> netTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, 5896, playerAgents);

            netTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, 22137, playerAgents));

            HashSet <AgentItem> rocketTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, 6108, playerAgents);

            rocketTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, 5914, playerAgents));

            HashSet <AgentItem> thumperTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, 5856, playerAgents);

            thumperTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, 5890, playerAgents));
            // TODO: need ID here
            HashSet <AgentItem> harpoonTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, -1, playerAgents);

            HashSet <AgentItem> healingTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, 5958, playerAgents);

            healingTurrets.RemoveWhere(x => thumperTurrets.Contains(x) || rocketTurrets.Contains(x) || netTurrets.Contains(x) || rifleTurrets.Contains(x) || flameTurrets.Contains(x) || harpoonTurrets.Contains(x));

            var engineers = players.Where(x => x.BaseSpec == Spec.Engineer).ToList();

            // if only one engineer, could only be that one
            if (engineers.Count == 1)
            {
                Player engineer = engineers[0];
                ProfHelper.SetGadgetMaster(flameTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(netTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(rocketTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(rifleTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(thumperTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(harpoonTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(healingTurrets, engineer.AgentItem);
            }
            else if (engineers.Count > 1)
            {
                ProfHelper.AttachMasterToGadgetByCastData(combatData, flameTurrets, new List <long> {
                    5836, 5868
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, rifleTurrets, new List <long> {
                    5818
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, netTurrets, new List <long> {
                    5837, 5868, 6183
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, rocketTurrets, new List <long> {
                    5912, 22574, 6183
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, thumperTurrets, new List <long> {
                    5838
                }, 1000);
                //AttachMasterToGadgetByCastData(castData, harpoonTurrets, new List<long> { 6093, 6183 }, 1000);
                //AttachMasterToGadgetByCastData(castData, healingTurrets, new List<long> { 5857, 5868 }, 1000);
            }
        }
예제 #10
0
        public static void AttachMasterToEngineerTurrets(IReadOnlyList <Player> players, CombatData combatData)
        {
            var playerAgents = new HashSet <AgentItem>(players.Select(x => x.AgentItem));

            HashSet <AgentItem> flameTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, FireTurretDamage, playerAgents);

            HashSet <AgentItem> rifleTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, RifleTurretDamage, playerAgents);

            rifleTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, RifleTurretDamageUW, playerAgents));

            HashSet <AgentItem> netTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, NetTurretDamage, playerAgents);

            netTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, NetTurretDamageUW, playerAgents));

            HashSet <AgentItem> rocketTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, RocketTurretDamage, playerAgents);

            rocketTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, RocketTurretDamageUW, playerAgents));

            HashSet <AgentItem> thumperTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, ThumperTurret, playerAgents);

            thumperTurrets.UnionWith(ProfHelper.GetOffensiveGadgetAgents(combatData, ThumperTurretUW, playerAgents));
            // TODO: need ID here
            HashSet <AgentItem> harpoonTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, Unknown, playerAgents);

            HashSet <AgentItem> healingTurrets = ProfHelper.GetOffensiveGadgetAgents(combatData, TurretExplosion, playerAgents);

            healingTurrets.RemoveWhere(x => thumperTurrets.Contains(x) || rocketTurrets.Contains(x) || netTurrets.Contains(x) || rifleTurrets.Contains(x) || flameTurrets.Contains(x) || harpoonTurrets.Contains(x));

            var engineers = players.Where(x => x.BaseSpec == Spec.Engineer).ToList();

            // if only one engineer, could only be that one
            if (engineers.Count == 1)
            {
                Player engineer = engineers[0];
                ProfHelper.SetGadgetMaster(flameTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(netTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(rocketTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(rifleTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(thumperTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(harpoonTurrets, engineer.AgentItem);
                ProfHelper.SetGadgetMaster(healingTurrets, engineer.AgentItem);
            }
            else if (engineers.Count > 1)
            {
                ProfHelper.AttachMasterToGadgetByCastData(combatData, flameTurrets, new List <long> {
                    FlameTurretCast, SupplyCrate
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, rifleTurrets, new List <long> {
                    RifleTurretCast
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, netTurrets, new List <long> {
                    NetTurretCast, SupplyCrate, SupplyCrateUW
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, rocketTurrets, new List <long> {
                    RocketTurretCast, RocketTurretCast2, SupplyCrateUW
                }, 1000);
                ProfHelper.AttachMasterToGadgetByCastData(combatData, thumperTurrets, new List <long> {
                    ThumperTurretCast
                }, 1000);
                //AttachMasterToGadgetByCastData(castData, harpoonTurrets, new List<long> { 6093, 6183 }, 1000);
                //AttachMasterToGadgetByCastData(castData, healingTurrets, new List<long> { 5857, 5868 }, 1000);
            }
        }