示例#1
0
    public void spawnCircle()
    {
        GameObject tempCircle;

        if (GameManager.Stage % 5 == 0)
        {
            Bosses b = BossPrefabs [Random.Range(0, BossPrefabs.Length)];
            tempCircle      = Instantiate <Circle> (b.BossPrefab, circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
            currentBossName = "Boss : " + b.Bossname;
            UpdateLable();
            OnBossFightStart();
        }
        else
        {
            if (GameManager.Stage > 50)
            {
                tempCircle = Instantiate <Circle> (circlePrefabs [Random.Range(11, circlePrefabs.Length - 1)], circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
            }
            else
            {
                tempCircle = Instantiate <Circle> (circlePrefabs [GameManager.Stage - 1], circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
            }
        }

        tempCircle.transform.localScale = Vector3.one;
        float circleScale = (GameManager.ScreenWidth * circleWidthByScreen) / tempCircle.GetComponent <SpriteRenderer> ().bounds.size.x;

        tempCircle.transform.localScale = Vector3.one * .2f;
        LeanTween.scale(tempCircle, new Vector3(circleScale, circleScale, circleScale), .3f).setEaseOutBounce();
        tempCircle.transform.localScale = Vector3.one * circleScale;
        currentCircle = tempCircle.GetComponent <Circle>();
    }
示例#2
0
        protected override void OnAfterDelete()
        {
            base.OnAfterDelete();

            Altar  = null;
            Vendor = null;

            BossEarth  = null;
            BossFire   = null;
            BossFrost  = null;
            BossPoison = null;
            BossEnergy = null;

            Bosses.SetAll(i => null);
            Bosses = null;

            TeleportersTo.SetAll(i => null);
            TeleportersTo = null;

            TeleportersFrom.SetAll(i => null);
            TeleportersFrom = null;

            Circles = null;

            Floors.Free(true);
            Floors.SetAll(i => null);
            Floors = null;

            Stage.Free(true);
            Stage = null;
        }
示例#3
0
        protected override void OnDelete()
        {
            base.OnDelete();

            if (Altar != null)
            {
                Altar.Delete();
            }

            if (Vendor != null)
            {
                Vendor.Delete();
            }

            foreach (var b in Bosses.Where(b => b != null))
            {
                b.Delete();
            }

            foreach (var t in TeleportersTo.Union(TeleportersFrom).Where(t => t != null))
            {
                t.Delete();
            }

            foreach (var s in Floors.Where(l => l != null).SelectMany(l => l.Where(s => s != null)))
            {
                s.Delete();
            }

            foreach (var s in Stage.Where(s => s != null))
            {
                s.Delete();
            }
        }
示例#4
0
        public void RemoveObject(MapObject ob)
        {
            Objects.Remove(ob);

            switch (ob.Race)
            {
            case ObjectType.Player:
                Players.Remove((PlayerObject)ob);
                break;

            case ObjectType.Item:
                break;

            case ObjectType.NPC:
                NPCs.Remove((NPCObject)ob);
                break;

            case ObjectType.Spell:
                break;

            case ObjectType.Monster:
                MonsterObject mob = (MonsterObject)ob;
                if (mob.MonsterInfo.IsBoss)
                {
                    Bosses.Remove(mob);
                }
                break;
            }
        }
示例#5
0
        private void UpdateFilteredBosses_TextChanged(Object sender, TextChangedEventArgs e)
        {
            FilteredBosses = Bosses.Where(b =>
                                          (String.IsNullOrEmpty(BossNameFilterTxtBox.Text) || b.Name.ToLower().StartsWith(BossNameFilterTxtBox.Text.ToLower())) &&
                                          ((String.IsNullOrEmpty(BossHpFilterTxtBox.Text) || BossHpFilterTxtBox.Text.Equals("-")) || b.Hp == Convert.ToInt32(BossHpFilterTxtBox.Text)) &&
                                          ((String.IsNullOrEmpty(BossOrderFilterTxtBox.Text) || BossOrderFilterTxtBox.Text.Equals("-")) || b.Order == Convert.ToInt32(BossOrderFilterTxtBox.Text)) &&

                                          ResistanceFilter(BossFireFilterTxtBox.Text, b.Elemental.Fire, BossFireFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossIceFilterTxtBox.Text, b.Elemental.Ice, BossIceFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossThunderFilterTxtBox.Text, b.Elemental.Thunder, BossThunderFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossAeroFilterTxtBox.Text, b.Elemental.Aero, BossAeroFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossWaterFilterTxtBox.Text, b.Elemental.Water, BossWaterFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossEarthFilterTxtBox.Text, b.Elemental.Earth, BossEarthFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossLightFilterTxtBox.Text, b.Elemental.Light, BossLightFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossDarkFilterTxtBox.Text, b.Elemental.Dark, BossDarkFilterCompareBtn.Content.ToString()) &&

                                          ResistanceFilter(BossPoisonFilterTxtBox.Text, b.Ailment.Poison, BossPoisonFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossConfuseFilterTxtBox.Text, b.Ailment.Confuse, BossConfuseFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossSleepFilterTxtBox.Text, b.Ailment.Sleep, BossSleepFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossBlindFilterTxtBox.Text, b.Ailment.Blind, BossBlindFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossOblivionFilterTxtBox.Text, b.Ailment.Oblivion, BossOblivionFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossBerserkFilterTxtBox.Text, b.Ailment.Berserk, BossBerserkFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossSlowFilterTxtBox.Text, b.Ailment.Slow, BossSlowFilterCompareBtn.Content.ToString()) &&
                                          ResistanceFilter(BossDoomFilterTxtBox.Text, b.Ailment.Doom, BossDoomFilterCompareBtn.Content.ToString()) &&

                                          ((String.IsNullOrEmpty(BossExpFilterTxtBox.Text) || BossExpFilterTxtBox.Text.Equals("-")) || b.Exp == Convert.ToInt32(BossExpFilterTxtBox.Text)) &&
                                          ((String.IsNullOrEmpty(BossGilFilterTxtBox.Text) || BossGilFilterTxtBox.Text.Equals("-")) || b.Gil == Convert.ToInt32(BossGilFilterTxtBox.Text)) &&
                                          (String.IsNullOrEmpty(BossDropsFilterTxtBox.Text) || b.Drops.ToLower().Contains(BossDropsFilterTxtBox.Text.ToLower())) &&
                                          (String.IsNullOrEmpty(BossNotesFilterTxtBox.Text) || b.Notes.ToLower().Contains(BossNotesFilterTxtBox.Text.ToLower()))
                                          ).ToList();
            UpdateBossDataGrid(FilteredBosses);
        }
示例#6
0
        public async void TimerCallback(object obj)
        {
            int wdNumber     = ((int)DateTime.Now.DayOfWeek == 0) ? 7 : (int)DateTime.Now.DayOfWeek;
            int nextWdNumber = wdNumber + 1 == 8 ? 1 : wdNumber + 1;
            var tsNow        = TimeSpan.Parse(DateTime.Now.Hour + ":" + DateTime.Now.Minute);

            foreach (var noti in NotiTime)
            {
                var boss = Bosses.Where(x =>
                                        x.Resps.Any(y =>
                                                    y.DayOfTheWeek == wdNumber && y.RespTime.Any(z =>
                                                                                                 (TimeSpan.Parse(z.Resp.Hour + ":00") - tsNow).Hours == 0 &&
                                                                                                 (TimeSpan.Parse(z.Resp.Hour + ":00") - tsNow).Minutes == noti.NotiTime))).ToList();

                var nextDayBoss = Bosses.Where(x =>
                                               x.Resps.Any(y =>
                                                           y.DayOfTheWeek == nextWdNumber && y.RespTime.Any(z =>
                                                                                                            (TimeSpan.Parse(z.Resp.Hour + ":00") - tsNow).Hours == -23 &&
                                                                                                            (TimeSpan.Parse(z.Resp.Hour + ":00") - tsNow).Minutes == (60 - noti.NotiTime) * -1))).ToList();


                if (boss.Count > 0 || nextDayBoss.Count > 0)
                {
                    var guilds = _discordClient.Guilds;
                    foreach (var guild in guilds)
                    {
                        var ch = guild.Channels.SingleOrDefault(x => x.Name == "main") as ISocketMessageChannel;
                        if (ch != null)
                        {
                            var currentBoss = boss.Count > 0 ? boss : nextDayBoss;
                            foreach (var item in currentBoss)
                            {
                                if (noti.NotiTime != 0)
                                {
                                    await ch.SendMessageAsync("Босс " + item.Name + " пробудится через " + noti.NotiTime + " минут");

                                    if (AudioClients.Count > 0)
                                    {
                                        string[] path = { "sounds/внимание.mp3", "sounds/" + item.Name + ".mp3", "sounds/пробудится.mp3", "sounds/" + noti.NotiTime + ".mp3" };
                                        foreach (var client in AudioClients)
                                        {
                                            await SendAsync(client, path);
                                        }
                                    }
                                }
                                else
                                {
                                    await ch.SendMessageAsync("Босс " + item.Name + " пробудился");
                                }
                            }
                        }
                    }
                }
            }
        }
示例#7
0
        public Main()
        {
            InitializeComponent();
            db = new CrmContext();

            dung   = new Dungeon(character);
            bosses = new Bosses(Name, db.Players.FirstOrDefault())
            {
                KillBoss = false
            };
        }
示例#8
0
        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);
            writer.Write(0);

            writer.Write(CurrentBoss);
            writer.Write(Minax);
            writer.Write(Bosses == null ? 0 : Bosses.Count);

            if (Bosses != null)
            {
                Bosses.ForEach(b => writer.Write(b.Name));
            }
        }
    public void spawnCircle()
    {
        GameObject tempCircle;

        if (GameManager.Stage % 5 == 0 && GameManager.Stage <= 10)
        {
            Bosses a = EasyBossPrefabs[Random.Range(0, EasyBossPrefabs.Length)];
            tempCircle      = Instantiate <Circle>(a.BossPrefab, circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
            currentBossName = "Boss : " + a.Bossname;
            UpdateLable();
            currentWoodSprite = Random.Range(0, WoodSprites.Count);
            OnBossFightStart();
        }
        else if (GameManager.Stage % 5 == 0 && GameManager.Stage > 10)
        {
            Bosses b = BossPrefabs[Random.Range(0, BossPrefabs.Length)];
            tempCircle      = Instantiate <Circle>(b.BossPrefab, circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
            currentBossName = "Boss : " + b.Bossname;
            UpdateLable();
            currentWoodSprite = Random.Range(0, WoodSprites.Count);
            OnBossFightStart();
        }
        else
        {
            if (GameManager.Stage > 50)
            {
                tempCircle = Instantiate <Circle>(circlePrefabs[Random.Range(11, circlePrefabs.Length - 1)], circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
                //edited added lines

                tempCircle.GetComponent <SpriteRenderer>().sprite = WoodSprites[currentWoodSprite];
            }
            else
            {
                tempCircle = Instantiate <Circle>(circlePrefabs[GameManager.Stage - 1], circleSpawnPoint.position, Quaternion.identity, circleSpawnPoint).gameObject;
                //edited added line
                tempCircle.GetComponent <SpriteRenderer>().sprite = WoodSprites[currentWoodSprite];
            }
        }
        tempCircle.transform.localScale = Vector3.one;
        //edited (GameManager.ScreenWidth * circleWidthByScreen) to (GameManager.ScreenHeight * circleHeightByScreen)
        float circleScale = (GameManager.ScreenHeight * circleHeightByScreen) / tempCircle.GetComponent <SpriteRenderer>().bounds.size.x;

        tempCircle.transform.localScale = Vector3.one * .2f;
        LeanTween.scale(tempCircle, new Vector3(circleScale, circleScale, circleScale), .3f).setEaseOutBounce();

        //tempCircle.transform.localScale = Vector3.one*circleScale;
        currentCircle = tempCircle.GetComponent <Circle>();
        currentCircle.SetWoodSprite(WoodSpriteParticles[currentWoodSprite]);
    }
示例#10
0
 private IDictionary <int, BossData> LoadBossData()
 {
     try
     {
         if (File.Exists(Bosses.JsonFileLocation))
         {
             return(Bosses.FromJsonFile($@"{ApplicationSettings.LocalDir}\boss_data.json"));
         }
         return(Bosses.GetDefaultSettingsForBossesAsDictionary());
     }
     catch
     {
         return(Bosses.GetDefaultSettingsForBossesAsDictionary());
     }
 }
示例#11
0
        public List <DungeonBoss> GetBossObjects()
        {
            var list = new List <DungeonBoss>();

            using (var db = new ChaliceDb())
            {
                foreach (var bossIdString in Bosses.Split(';'))
                {
                    var id   = int.Parse(bossIdString);
                    var boss = db.DungeonBosses.FirstOrDefault(b => b.Id == id);
                    list.Add(boss);
                }
            }

            return(list);
        }
示例#12
0
        public static void LoadSettings()
        {
            var path = "tshock/smarterstarter.json";

            if (!File.Exists(path))
            {
                Console.WriteLine("SmarterStarter configuration not found.");
            }
            else
            {
                Bosses loadedBosses = JsonConvert.DeserializeObject <Bosses>(File.ReadAllText(path));

                GetBosses = loadedBosses;

                Console.WriteLine("SmarterStarter configuration loaded.");
            }
        }
示例#13
0
        private void SpawnBoss()
        {
            if (Bosses == null)
            {
                return;
            }

            Point3D p = SpawnPoints[0];

            ConvertOffset(ref p);

            CurrentBoss = Activator.CreateInstance(Bosses[0]) as ShadowguardBoss;
            Bosses.Remove(Bosses[0]);

            if (CurrentBoss != null)
            {
                CurrentBoss.MoveToWorld(p, Map.TerMur);
            }

            if (Bosses.Count == 0)
            {
                CurrentBoss.IsLastBoss = true;
            }

            if (Minax != null && Minax.Alive)
            {
                if (CurrentBoss is Juonar)
                {
                    Minax.Say(1156258); // You shall burn as Trinsic burned at the hands of the Vile Lich Juo'nar!
                }
                else if (CurrentBoss is Anon)
                {
                    Minax.Say(1156259); // Oh Anon my dear! Deal with these pesky intruders will you? Burn them to ASH!
                }
                else if (CurrentBoss is Virtuebane)
                {
                    Minax.Say(1156260); // You didn't think that ridiculous pie trick would work twice in a row? Virtuebane I command thee destroy these vile creatures!
                }
                else
                {
                    Minax.Say(1156261); // And now you shall bow to the King of Kings! Suffer at the hands of the Feudal Lord Ozymandias!
                }
            }
        }
示例#14
0
        protected override void OnSpawnActivate(Mobile m)
        {
            base.OnSpawnActivate(m);

            if (m != null)
            {
                var index = Bosses.IndexOf(m);

                if (index > -1)
                {
                    TeleporterState(index, false);
                }

                if (!m.Deleted && m.Alive && m.Z < 0)
                {
                    Teleport(m, m.ToPoint3D(), Map);
                }
            }
        }
示例#15
0
        public async Task CheckBossTimersAsync()
        {
            foreach (var boss in Bosses)
            {
                //boss.IsTimerEnabled = BossNotificationService.IsBossTimerEnabled(boss);
                boss.Show = await BossNotificationService.IsBossInRegionAsync(boss);
            }

            int j = Bosses.Count;

            for (int i = 0; i < j; i++)
            {
                if (Bosses[i].Show)
                {
                    Bosses.Move(i, 0);
                }
            }
            NotifyOfPropertyChange(() => Bosses);
        }
示例#16
0
        protected override void OnSpawnDeactivate(Mobile m)
        {
            base.OnSpawnDeactivate(m);

            if (m != null)
            {
                var index = Bosses.IndexOf(m);

                if (index > -1)
                {
                    TeleporterState(index, true);

                    if (!m.Deleted && m.Alive && m.Z < 0)
                    {
                        Teleport(m, Circles[index].Start.Clone2D(25, 5).ToPoint3D(), Map);
                    }
                }
            }
        }
示例#17
0
 public FormBossData(FormMain mainLink)
 {
     this.mainLink = mainLink;
     templateLink  = new FormTemplateBossData();
     InitializeComponent();
     Icon = Properties.Resources.AppIcon;
     if (File.Exists($@"{mainLink.LocalDir}\boss_data.txt"))
     {
         try
         {
             allBosses    = Bosses.FromFile($@"{mainLink.LocalDir}\boss_data.txt");
             bossesIdsKey = allBosses.Count;
         }
         catch
         {
             allBosses.Clear();
             foreach (KeyValuePair <int, BossData> keyPair in Bosses.GetDefaultSettingsForBossesAsDictionary())
             {
                 allBosses.Add(keyPair.Key, keyPair.Value);
             }
             bossesIdsKey = allBosses.Count;
         }
     }
     else
     {
         allBosses.Clear();
         foreach (KeyValuePair <int, BossData> keyPair in Bosses.GetDefaultSettingsForBossesAsDictionary())
         {
             allBosses.Add(keyPair.Key, keyPair.Value);
         }
         bossesIdsKey = allBosses.Count;
     }
     foreach (int key in allBosses.Keys)
     {
         listViewBosses.Items.Add(new ListViewItem()
         {
             Name = key.ToString(), Text = allBosses[key].Name
         });
     }
 }
示例#18
0
        private void ButtonResetSettings_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Are you sure you want to reset all the bosses?\nThis will undo all Discord webhook icon and Twitch messages settings and reset them to their default state.", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result.Equals(DialogResult.Yes))
            {
                listViewBosses.Items.Clear();
                allBosses.Clear();
                foreach (KeyValuePair <int, BossData> keyPair in Bosses.GetDefaultSettingsForBossesAsDictionary())
                {
                    allBosses.Add(keyPair.Key, keyPair.Value);
                }
                bossesIdsKey = allBosses.Count;
                foreach (int key in allBosses.Keys)
                {
                    listViewBosses.Items.Add(new ListViewItem()
                    {
                        Name = key.ToString(), Text = allBosses[key].Name
                    });
                }
            }
        }
示例#19
0
        public FormEditDiscordWebhook(FormDiscordWebhooks discordPingLink, DiscordWebhookData data, int reservedId)
        {
            this.discordPingLink = discordPingLink;
            this.data            = data;
            this.reservedId      = reservedId;
            InitializeComponent();
            Icon             = Properties.Resources.AppIcon;
            Text             = (data == null) ? "Add a new webhook" : "Edit an existing webhook";
            textBoxName.Text = data?.Name ?? "";
            textBoxUrl.Text  = data?.URL ?? "";
            switch (data?.SuccessFailToggle ?? DiscordWebhookDataSuccessToggle.OnSuccessAndFailure)
            {
            case DiscordWebhookDataSuccessToggle.OnSuccessOnly:
                radioButtonOnlySuccess.Checked = true;
                break;

            case DiscordWebhookDataSuccessToggle.OnFailOnly:
                radioButtonOnlyFail.Checked = true;
                break;

            default:
                radioButtonOnlySuccessAndFail.Checked = true;
                break;
            }
            checkBoxPlayers.Checked = data?.ShowPlayers ?? false;
            Dictionary <int, BossData> bosses = Bosses.GetAllBosses();

            bosses = bosses
                     .OrderBy(x => x.Value.Type)
                     .ThenBy(x => x.Value.Name)
                     .ToDictionary(x => x.Key, x => x.Value);
            foreach (int bossNumber in bosses.Keys)
            {
                checkedListBoxBossesEnable.Items.Add(new BossesDisableHelperClass()
                {
                    BossID = bosses[bossNumber].BossId, Text = $"{bosses[bossNumber].Type}: {bosses[bossNumber].Name} ({bosses[bossNumber].BossId})"
                }, data?.IsBossEnabled(bosses[bossNumber].BossId) ?? true);
            }
        }
示例#20
0
        public override void OnDeath(DungeonZone zone, Mobile m)
        {
            base.OnDeath(zone, m);

            var index = Bosses.IndexOf(m);

            if (index > -1)
            {
                if (m.Corpse != null)
                {
                    m.Corpse.Z = -20;
                }

                while (Floors[index].Count > 0)
                {
                    DropFloor(index, true);
                }

                TeleportersTo[index].Hue    = 2999;
                TeleportersTo[index].ItemID = 19343;

                TeleporterMove(index, Circles[index].Start.Clone2D(25, 25).ToPoint3D(-20));
            }
        }
示例#21
0
 public Boss GetBoss(int bossId)
 {
     return(Bosses.First(b => b.Id == bossId));
 }
示例#22
0
 public async Task ExecuteAllActiveWebhooksAsync(DPSReportJSON reportJSON)
 {
     if (reportJSON.Encounter.BossId.Equals(1)) // WvW
     {
         var extraJSONFightName = (reportJSON.ExtraJSON is null) ? reportJSON.Encounter.Boss : reportJSON.ExtraJSON.FightName;
         var extraJSON          = (reportJSON.ExtraJSON is null) ? string.Empty : $"Recorded by: {reportJSON.ExtraJSON.RecordedBy}\nDuration: {reportJSON.ExtraJSON.Duration}\nElite Insights version: {reportJSON.ExtraJSON.EliteInsightsVersion}";
         var icon     = string.Empty;
         var bossData = Bosses.GetBossDataFromId(1);
         if (!(bossData is null))
         {
             icon = bossData.Icon;
         }
         var colour = 16752238;
         var discordContentEmbedThumbnail = new DiscordAPIJSONContentEmbedThumbnail()
         {
             Url = icon
         };
         var timestampDateTime = DateTime.UtcNow;
         if (!(reportJSON.ExtraJSON is null))
         {
             timestampDateTime = reportJSON.ExtraJSON.TimeStart;
         }
         var timestamp           = timestampDateTime.ToString("o");
         var discordContentEmbed = new DiscordAPIJSONContentEmbed()
         {
             Title       = extraJSONFightName,
             Url         = reportJSON.Permalink,
             Description = $"{extraJSON}\narcdps version: {reportJSON.EVTC.Type}{reportJSON.EVTC.Version}",
             Colour      = colour,
             TimeStamp   = timestamp,
             Thumbnail   = discordContentEmbedThumbnail
         };
         // fields
         if (!(reportJSON.ExtraJSON is null))
         {
             // squad summary
             var squadPlayers = reportJSON.ExtraJSON.Players
                                .Where(x => !x.FriendNPC && !x.NotInSquad)
                                .Count();
             var squadDamage = reportJSON.ExtraJSON.Players
                               .Where(x => !x.FriendNPC && !x.NotInSquad)
                               .Select(x => x.DpsTargets.Sum(y => y.Sum(z => z.Damage)))
                               .Sum();
             var squadDps = reportJSON.ExtraJSON.Players
                            .Where(x => !x.FriendNPC && !x.NotInSquad)
                            .Select(x => x.DpsTargets.Sum(y => y.Sum(z => z.DPS)))
                            .Sum();
             var squadDowns = reportJSON.ExtraJSON.Players
                              .Where(x => !x.FriendNPC && !x.NotInSquad)
                              .Select(x => x.Defenses.First().DownCount)
                              .Sum();
             var squadDeaths = reportJSON.ExtraJSON.Players
                               .Where(x => !x.FriendNPC && !x.NotInSquad)
                               .Select(x => x.Defenses.First().DeadCount)
                               .Sum();
             var squadSummary = new TextTable(5, tableStyle, tableBorders);
             squadSummary.SetColumnWidthRange(0, 3, 3);
             squadSummary.SetColumnWidthRange(1, 10, 10);
             squadSummary.SetColumnWidthRange(2, 10, 10);
             squadSummary.SetColumnWidthRange(3, 8, 8);
             squadSummary.SetColumnWidthRange(4, 8, 8);
             squadSummary.AddCell("#", tableCellCenterAlign);
             squadSummary.AddCell("DMG", tableCellCenterAlign);
             squadSummary.AddCell("DPS", tableCellCenterAlign);
             squadSummary.AddCell("Downs", tableCellCenterAlign);
             squadSummary.AddCell("Deaths", tableCellCenterAlign);
             squadSummary.AddCell($"{squadPlayers}", tableCellCenterAlign);
             squadSummary.AddCell($"{squadDamage.ParseAsK()}", tableCellCenterAlign);
             squadSummary.AddCell($"{squadDps.ParseAsK()}", tableCellCenterAlign);
             squadSummary.AddCell($"{squadDowns}", tableCellCenterAlign);
             squadSummary.AddCell($"{squadDeaths}", tableCellCenterAlign);
             var squadField = new DiscordAPIJSONContentEmbedField()
             {
                 Name  = "Squad summary:",
                 Value = $"```{squadSummary.Render()}```"
             };
             // enemy summary field
             var enemyField = new DiscordAPIJSONContentEmbedField()
             {
                 Name  = "Enemy summary:",
                 Value = $"```Summary could not have been generated.\nToggle detailed WvW to enable this feature.```"
             };
             if (reportJSON.ExtraJSON.Targets.Count > 1)
             {
                 var enemyPlayers = reportJSON.ExtraJSON.Targets
                                    .Count() - 1;
                 var enemyDamage = reportJSON.ExtraJSON.Targets
                                   .Where(x => !x.IsFake)
                                   .Select(x => x.DpsAll.First().Damage)
                                   .Sum();
                 var enemyDps = reportJSON.ExtraJSON.Targets
                                .Where(x => !x.IsFake)
                                .Select(x => x.DpsAll.First().DPS)
                                .Sum();
                 var enemyDowns = reportJSON.ExtraJSON.Players
                                  .Where(x => !x.FriendNPC && !x.NotInSquad)
                                  .Select(x => x.StatsTargets.Select(y => y.First().Downed).Sum())
                                  .Sum();
                 var enemyDeaths = reportJSON.ExtraJSON.Players
                                   .Where(x => !x.FriendNPC && !x.NotInSquad)
                                   .Select(x => x.StatsTargets.Select(y => y.First().Killed).Sum())
                                   .Sum();
                 var enemySummary = new TextTable(5, tableStyle, tableBorders);
                 enemySummary.SetColumnWidthRange(0, 3, 3);
                 enemySummary.SetColumnWidthRange(1, 10, 10);
                 enemySummary.SetColumnWidthRange(2, 10, 10);
                 enemySummary.SetColumnWidthRange(3, 8, 8);
                 enemySummary.SetColumnWidthRange(4, 8, 8);
                 enemySummary.AddCell("#", tableCellCenterAlign);
                 enemySummary.AddCell("DMG", tableCellCenterAlign);
                 enemySummary.AddCell("DPS", tableCellCenterAlign);
                 enemySummary.AddCell("Downs", tableCellCenterAlign);
                 enemySummary.AddCell("Deaths", tableCellCenterAlign);
                 enemySummary.AddCell($"{enemyPlayers}", tableCellCenterAlign);
                 enemySummary.AddCell($"{enemyDamage.ParseAsK()}", tableCellCenterAlign);
                 enemySummary.AddCell($"{enemyDps.ParseAsK()}", tableCellCenterAlign);
                 enemySummary.AddCell($"{enemyDowns}", tableCellCenterAlign);
                 enemySummary.AddCell($"{enemyDeaths}", tableCellCenterAlign);
                 enemyField = new DiscordAPIJSONContentEmbedField()
                 {
                     Name  = "Enemy summary:",
                     Value = $"```{enemySummary.Render()}```"
                 };
             }
             // damage summary
             var damageStats = reportJSON.ExtraJSON.Players
                               .Where(x => !x.FriendNPC && !x.NotInSquad)
                               .Where(x => x.DpsTargets.Sum(y => y.First().Damage) > 0)
                               .OrderByDescending(x => x.DpsTargets.Sum(y => y.First().Damage))
                               .Take(10)
                               .ToList();
             var damageSummary = new TextTable(4, tableStyle, tableBorders);
             damageSummary.SetColumnWidthRange(0, 3, 3);
             damageSummary.SetColumnWidthRange(1, 25, 25);
             damageSummary.SetColumnWidthRange(2, 7, 7);
             damageSummary.SetColumnWidthRange(3, 6, 6);
             damageSummary.AddCell("#", tableCellCenterAlign);
             damageSummary.AddCell("Name");
             damageSummary.AddCell("DMG", tableCellRightAlign);
             damageSummary.AddCell("DPS", tableCellRightAlign);
             var rank = 0;
             foreach (var player in damageStats)
             {
                 rank++;
                 damageSummary.AddCell($"{rank}", tableCellCenterAlign);
                 damageSummary.AddCell($"{player.Name} ({player.ProfessionShort})");
                 damageSummary.AddCell($"{player.DpsTargets.Sum(y => y.First().Damage).ParseAsK()}", tableCellRightAlign);
                 damageSummary.AddCell($"{player.DpsTargets.Sum(y => y.First().DPS).ParseAsK()}", tableCellRightAlign);
             }
             var damageField = new DiscordAPIJSONContentEmbedField()
             {
                 Name  = "Damage summary:",
                 Value = $"```{damageSummary.Render()}```"
             };
             // cleanses summary
             var cleansesStats = reportJSON.ExtraJSON.Players
                                 .Where(x => !x.FriendNPC && !x.NotInSquad)
                                 .Where(x => x.Support.First().CondiCleanseTotal > 0)
                                 .OrderByDescending(x => x.Support.First().CondiCleanseTotal)
                                 .Take(10)
                                 .ToList();
             var cleansesSummary = new TextTable(3, tableStyle, tableBorders);
             cleansesSummary.SetColumnWidthRange(0, 3, 3);
             cleansesSummary.SetColumnWidthRange(1, 27, 27);
             cleansesSummary.SetColumnWidthRange(2, 12, 12);
             cleansesSummary.AddCell("#", tableCellCenterAlign);
             cleansesSummary.AddCell("Name");
             cleansesSummary.AddCell("Cleanses", tableCellRightAlign);
             rank = 0;
             foreach (var player in cleansesStats)
             {
                 rank++;
                 cleansesSummary.AddCell($"{rank}", tableCellCenterAlign);
                 cleansesSummary.AddCell($"{player.Name} ({player.ProfessionShort})");
                 cleansesSummary.AddCell($"{player.Support.First().CondiCleanseTotal}", tableCellRightAlign);
             }
             var cleansesField = new DiscordAPIJSONContentEmbedField()
             {
                 Name  = "Cleanses summary:",
                 Value = $"```{cleansesSummary.Render()}```"
             };
             // boon strips summary
             var boonStripsStats = reportJSON.ExtraJSON.Players
                                   .Where(x => !x.FriendNPC && !x.NotInSquad)
                                   .Where(x => x.Support.First().BoonStrips > 0)
                                   .OrderByDescending(x => x.Support.First().BoonStrips)
                                   .Take(10)
                                   .ToList();
             var boonStripsSummary = new TextTable(3, tableStyle, tableBorders);
             boonStripsSummary.SetColumnWidthRange(0, 3, 3);
             boonStripsSummary.SetColumnWidthRange(1, 27, 27);
             boonStripsSummary.SetColumnWidthRange(2, 12, 12);
             boonStripsSummary.AddCell("#", tableCellCenterAlign);
             boonStripsSummary.AddCell("Name");
             boonStripsSummary.AddCell("Strips", tableCellRightAlign);
             rank = 0;
             foreach (var player in boonStripsStats)
             {
                 rank++;
                 boonStripsSummary.AddCell($"{rank}", tableCellCenterAlign);
                 boonStripsSummary.AddCell($"{player.Name} ({player.ProfessionShort})");
                 boonStripsSummary.AddCell($"{player.Support.First().BoonStrips}", tableCellRightAlign);
             }
             var boonStripsField = new DiscordAPIJSONContentEmbedField()
             {
                 Name  = "Boon strips summary:",
                 Value = $"```{boonStripsSummary.Render()}```"
             };
             // add the fields
             discordContentEmbed.Fields = new List <DiscordAPIJSONContentEmbedField>()
             {
                 squadField,
                 enemyField,
                 damageField,
                 cleansesField,
                 boonStripsField
             };
         }
         // post to discord
         var discordContentWvW = new DiscordAPIJSONContent()
         {
             Embeds = new List <DiscordAPIJSONContentEmbed>()
             {
                 discordContentEmbed
             }
         };
         try
         {
             var jsonContentWvW = JsonConvert.SerializeObject(discordContentWvW);
             foreach (var key in allWebhooks.Keys)
             {
                 var webhook = allWebhooks[key];
                 if (!webhook.Active ||
                     (webhook.SuccessFailToggle.Equals(DiscordWebhookDataSuccessToggle.OnSuccessOnly) && !(reportJSON.Encounter.Success ?? false)) ||
                     (webhook.SuccessFailToggle.Equals(DiscordWebhookDataSuccessToggle.OnFailOnly) && (reportJSON.Encounter.Success ?? false)) ||
                     (webhook.BossesDisable.Contains(reportJSON.Encounter.BossId)) ||
                     (!webhook.Team.IsSatisfied(reportJSON.ExtraJSON)))
                 {
                     continue;
                 }
                 var uri = new Uri(webhook.URL);
                 using var content  = new StringContent(jsonContentWvW, Encoding.UTF8, "application/json");
                 using var response = await mainLink.HttpClientController.PostAsync(uri, content);
             }
             if (allWebhooks.Count > 0)
             {
                 mainLink.AddToText(">:> All active webhooks successfully executed.");
             }
         }
         catch
         {
             mainLink.AddToText(">:> Unable to execute active webhooks.");
         }
     }
     else // not WvW
     {
         var bossName      = $"{reportJSON.Encounter.Boss}{(reportJSON.ChallengeMode ? " CM" : string.Empty)}";
         var successString = (reportJSON.Encounter.Success ?? false) ? ":white_check_mark:" : "❌";
         var extraJSON     = (reportJSON.ExtraJSON is null) ? string.Empty : $"Recorded by: {reportJSON.ExtraJSON.RecordedBy}\nDuration: {reportJSON.ExtraJSON.Duration}\nElite Insights version: {reportJSON.ExtraJSON.EliteInsightsVersion}\n";
         var icon          = string.Empty;
         var bossData      = Bosses.GetBossDataFromId(reportJSON.Encounter.BossId);
         if (!(bossData is null))
         {
             bossName = $"{bossData.Name}{(reportJSON.ChallengeMode ? " CM" : string.Empty)}";
             icon     = bossData.Icon;
         }
         var colour = (reportJSON.Encounter.Success ?? false) ? 32768 : 16711680;
         var discordContentEmbedThumbnail = new DiscordAPIJSONContentEmbedThumbnail()
         {
             Url = icon
         };
         var timestampDateTime = DateTime.UtcNow;
         if (!(reportJSON.ExtraJSON is null))
         {
             timestampDateTime = reportJSON.ExtraJSON.TimeStart;
         }
         var timestamp           = timestampDateTime.ToString("o");
         var discordContentEmbed = new DiscordAPIJSONContentEmbed()
         {
             Title       = bossName,
             Url         = reportJSON.Permalink,
             Description = $"{extraJSON}Result: {successString}\narcdps version: {reportJSON.EVTC.Type}{reportJSON.EVTC.Version}",
             Colour      = colour,
             TimeStamp   = timestamp,
             Thumbnail   = discordContentEmbedThumbnail
         };
         var discordContentWithoutPlayers = new DiscordAPIJSONContent()
         {
             Embeds = new List <DiscordAPIJSONContentEmbed>()
             {
                 discordContentEmbed
             }
         };
         var discordContentEmbedForPlayers = new DiscordAPIJSONContentEmbed()
         {
             Title       = bossName,
             Url         = reportJSON.Permalink,
             Description = $"{extraJSON}Result: {successString}\narcdps version: {reportJSON.EVTC.Type}{reportJSON.EVTC.Version}",
             Colour      = colour,
             TimeStamp   = timestamp,
             Thumbnail   = discordContentEmbedThumbnail
         };
         if (reportJSON.Players.Values.Count <= 10)
         {
             var fields = new List <DiscordAPIJSONContentEmbedField>();
             if (reportJSON.ExtraJSON is null)
             {
                 foreach (var player in reportJSON.Players.Values)
                 {
                     fields.Add(new DiscordAPIJSONContentEmbedField()
                     {
                         Name = player.CharacterName, Value = $"```\n{player.DisplayName}\n\n{Players.ResolveSpecName(player.Profession, player.EliteSpec)}\n```", Inline = true
                     });
                 }
             }
             else
             {
                 // player list
                 var playerNames = new TextTable(2, tableStyle, tableBorders);
                 playerNames.SetColumnWidthRange(0, 21, 21);
                 playerNames.SetColumnWidthRange(1, 20, 20);
                 playerNames.AddCell("Character");
                 playerNames.AddCell("Account name");
                 foreach (var player in reportJSON.ExtraJSON.Players.Where(x => !x.FriendNPC).OrderBy(x => x.Name))
                 {
                     playerNames.AddCell($"{player.Name}");
                     playerNames.AddCell($"{player.Account}");
                 }
                 fields.Add(new DiscordAPIJSONContentEmbedField()
                 {
                     Name  = "Players in squad/group:",
                     Value = $"```{playerNames.Render()}```"
                 });
                 var numberOfRealTargers = reportJSON.ExtraJSON.Targets
                                           .Where(x => !x.IsFake)
                                           .Count();
                 // damage summary
                 var damageStats = reportJSON.ExtraJSON.Players
                                   .Where(x => !x.FriendNPC)
                                   .Select(x => new
                 {
                     Player = x,
                     DPS    = numberOfRealTargers > 0 ? reportJSON.ExtraJSON.PlayerTargetDPS[x] : x.DpsAll.First().DPS
                 })
                                   .OrderByDescending(x => x.DPS)
                                   .Take(10)
                                   .ToList();
                 var dpsTargetSummary = new TextTable(3, tableStyle, TableVisibleBorders.HEADER_AND_FOOTER);
                 dpsTargetSummary.SetColumnWidthRange(0, 5, 5);
                 dpsTargetSummary.SetColumnWidthRange(1, 27, 27);
                 dpsTargetSummary.SetColumnWidthRange(2, 8, 8);
                 dpsTargetSummary.AddCell("#", tableCellCenterAlign);
                 dpsTargetSummary.AddCell("Name");
                 dpsTargetSummary.AddCell("DPS", tableCellRightAlign);
                 var rank = 0;
                 foreach (var player in damageStats)
                 {
                     rank++;
                     dpsTargetSummary.AddCell($"{rank}", tableCellCenterAlign);
                     dpsTargetSummary.AddCell($"{player.Player.Name} ({player.Player.ProfessionShort})");
                     dpsTargetSummary.AddCell($"{player.DPS.ParseAsK()}", tableCellRightAlign);
                 }
                 dpsTargetSummary.AddCell(string.Empty);
                 dpsTargetSummary.AddCell("Total");
                 var totalDPS = damageStats
                                .Select(x => x.DPS)
                                .Sum();
                 dpsTargetSummary.AddCell($"{totalDPS.ParseAsK()}", tableCellRightAlign);
                 fields.Add(new DiscordAPIJSONContentEmbedField()
                 {
                     Name  = "DPS target summary:",
                     Value = $"```{dpsTargetSummary.Render()}```"
                 });
             }
             discordContentEmbedForPlayers.Fields = fields;
         }
         var discordContentWithPlayers = new DiscordAPIJSONContent()
         {
             Embeds = new List <DiscordAPIJSONContentEmbed>()
             {
                 discordContentEmbedForPlayers
             }
         };
         try
         {
             var jsonContentWithoutPlayers = JsonConvert.SerializeObject(discordContentWithoutPlayers);
             var jsonContentWithPlayers    = JsonConvert.SerializeObject(discordContentWithPlayers);
             foreach (var key in allWebhooks.Keys)
             {
                 var webhook = allWebhooks[key];
                 if (!webhook.Active ||
                     (webhook.SuccessFailToggle.Equals(DiscordWebhookDataSuccessToggle.OnSuccessOnly) && !(reportJSON.Encounter.Success ?? false)) ||
                     (webhook.SuccessFailToggle.Equals(DiscordWebhookDataSuccessToggle.OnFailOnly) && (reportJSON.Encounter.Success ?? false)) ||
                     (webhook.BossesDisable.Contains(reportJSON.Encounter.BossId)) ||
                     (!webhook.Team.IsSatisfied(reportJSON.ExtraJSON)))
                 {
                     continue;
                 }
                 var uri = new Uri(webhook.URL);
                 if (webhook.ShowPlayers)
                 {
                     using var content = new StringContent(jsonContentWithPlayers, Encoding.UTF8, "application/json");
                     using (await mainLink.HttpClientController.PostAsync(uri, content)) { }
                 }
                 else
                 {
                     using var content = new StringContent(jsonContentWithoutPlayers, Encoding.UTF8, "application/json");
                     using (await mainLink.HttpClientController.PostAsync(uri, content)) { }
                 }
             }
             if (allWebhooks.Count > 0)
             {
                 mainLink.AddToText(">:> All active webhooks successfully executed.");
             }
         }
         catch
         {
             mainLink.AddToText(">:> Unable to execute active webhooks.");
         }
     }
 }
示例#23
0
 private void FormBossData_FormClosing(object sender, FormClosingEventArgs e)
 {
     e.Cancel = true;
     Hide();
     Bosses.SaveToJson(allBosses);
 }
示例#24
0
        public static DiscordEmbeds ConstructSessionEmbeds(List <DPSReportJSON> reportsJSON, LogSessionSettings logSessionSettings)
        {
            var discordEmbedsSuccessFailure = new List <DiscordAPIJSONContentEmbed>();
            var discordEmbedsSuccess        = new List <DiscordAPIJSONContentEmbed>();
            var discordEmbedsFailure        = new List <DiscordAPIJSONContentEmbed>();
            DiscordAPIJSONContentEmbed discordEmbedSummary = null;

            var RaidLogs = reportsJSON
                           .Where(x => Bosses.GetWingForBoss(x.EVTC.BossId) > 0)
                           .Select(x => new { LogData = x, RaidWing = Bosses.GetWingForBoss(x.EVTC.BossId) })
                           .OrderBy(x => x.LogData.UploadTime)
                           .ToList();

            if (logSessionSettings.SortBy.Equals(LogSessionSortBy.Wing))
            {
                RaidLogs = reportsJSON
                           .Where(x => Bosses.GetWingForBoss(x.EVTC.BossId) > 0)
                           .Select(x => new { LogData = x, RaidWing = Bosses.GetWingForBoss(x.EVTC.BossId) })
                           .OrderBy(x => Bosses.GetWingForBoss(x.LogData.EVTC.BossId))
                           .ThenBy(x => Bosses.GetBossOrder(x.LogData.Encounter.BossId))
                           .ThenBy(x => x.LogData.UploadTime)
                           .ToList();
            }
            var FractalLogs = reportsJSON
                              .Where(x => allBosses
                                     .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                     .Where(y => y.Value.Type.Equals(BossType.Fractal))
                                     .Count() > 0)
                              .ToList();
            var StrikeLogs = reportsJSON
                             .Where(x => allBosses
                                    .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                    .Where(y => y.Value.Type.Equals(BossType.Strike))
                                    .Count() > 0)
                             .ToList();
            var GolemLogs = reportsJSON
                            .Where(x => allBosses
                                   .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                   .Where(y => y.Value.Type.Equals(BossType.Golem))
                                   .Count() > 0)
                            .ToList();
            var WvWLogs = reportsJSON
                          .Where(x => allBosses
                                 .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                 .Where(y => y.Value.Type.Equals(BossType.WvW))
                                 .Count() > 0)
                          .ToList();
            var OtherLogs = reportsJSON
                            .Where(x => allBosses
                                   .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                   .Where(y => y.Value.Type.Equals(BossType.None))
                                   .Count() > 0 || allBosses
                                   .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                   .Count() == 0)
                            .ToList();

            var durationText = $"Session duration: **{logSessionSettings.ElapsedTime}**";
            var builderSuccessFailure = ((WvWLogs.Count > 0) && logSessionSettings.MakeWvWSummaryEmbed) ? new StringBuilder() : new StringBuilder($"{durationText}\n\n");
            var builderSuccess = ((WvWLogs.Count > 0) && logSessionSettings.MakeWvWSummaryEmbed) ? new StringBuilder() : new StringBuilder($"{durationText}\n\n");
            var builderFailure = ((WvWLogs.Count > 0) && logSessionSettings.MakeWvWSummaryEmbed) ? new StringBuilder() : new StringBuilder($"{durationText}\n\n");
            int messageSuccessFailureCount = 0, messageSuccessCount = 0, messageFailureCount = 0;

            if (RaidLogs.Count > 0)
            {
                builderSuccessFailure.Append("***Raid logs:***\n");
                if (logSessionSettings.SortBy.Equals(LogSessionSortBy.UploadTime))
                {
                    foreach (var data in RaidLogs)
                    {
                        var bossName = data.LogData.Encounter.Boss + (data.LogData.ChallengeMode ? " CM" : string.Empty);
                        var bossData = Bosses.GetBossDataFromId(data.LogData.Encounter.BossId);
                        if (!(bossData is null))
                        {
                            bossName = bossData.Name + (data.LogData.ChallengeMode ? " CM" : string.Empty);
                        }
                        var duration    = (data.LogData.ExtraJSON is null) ? string.Empty : $" {data.LogData.ExtraJSON.Duration}";
                        var successText = (logSessionSettings.ShowSuccess) ? ((data.LogData.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : string.Empty;
                        builderSuccessFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                        if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessFailureCount++;
                            discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                            builderSuccessFailure.Clear();
                            builderSuccessFailure.Append("***Raid logs:***\n");
                        }
                        if (data.LogData.Encounter.Success ?? false)
                        {
                            builderSuccess.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderSuccess.Length >= maxAllowedMessageSize)
                            {
                                messageSuccessCount++;
                                discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                                builderSuccess.Clear();
                                builderSuccess.Append("***Raid logs:***\n");
                            }
                        }
                        else
                        {
                            builderFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderFailure.Length >= maxAllowedMessageSize)
                            {
                                messageFailureCount++;
                                discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                                builderFailure.Clear();
                                builderFailure.Append("***Raid logs:***\n");
                            }
                        }
                    }
                }
                else
                {
                    var lastWing = 0;
                    foreach (var data in RaidLogs)
                    {
                        if (!lastWing.Equals(Bosses.GetWingForBoss(data.LogData.EVTC.BossId)))
                        {
                            builderSuccessFailure.Append($"**{Bosses.GetWingName(data.RaidWing)} (wing {data.RaidWing})**\n");
                            lastWing = Bosses.GetWingForBoss(data.LogData.EVTC.BossId);
                        }
                        var bossName = data.LogData.Encounter.Boss + (data.LogData.ChallengeMode ? " CM" : string.Empty);
                        var bossData = Bosses.GetBossDataFromId(data.LogData.Encounter.BossId);
                        if (!(bossData is null))
                        {
                            bossName = bossData.Name + (data.LogData.ChallengeMode ? " CM" : string.Empty);
                        }
                        var duration    = (data.LogData.ExtraJSON is null) ? string.Empty : $" {data.LogData.ExtraJSON.Duration}";
                        var successText = (logSessionSettings.ShowSuccess) ? ((data.LogData.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : string.Empty;
                        builderSuccessFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                        if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessFailureCount++;
                            discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                            builderSuccessFailure.Clear();
                            builderSuccessFailure.Append($"**{Bosses.GetWingName(data.RaidWing)} (wing {data.RaidWing})**\n");
                        }
                        if (data.LogData.Encounter.Success ?? false)
                        {
                            builderSuccess.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderSuccess.Length >= maxAllowedMessageSize)
                            {
                                messageSuccessCount++;
                                discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                                builderSuccess.Clear();
                                builderSuccess.Append("***Raid logs:***\n");
                            }
                        }
                        else
                        {
                            builderFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderFailure.Length >= maxAllowedMessageSize)
                            {
                                messageFailureCount++;
                                discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                                builderFailure.Clear();
                                builderFailure.Append("***Raid logs:***\n");
                            }
                        }
                    }
                }
            }
            if (FractalLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Fractal logs:***\n");
                foreach (var log in FractalLogs)
                {
                    var bossName = log.Encounter.Boss;
                    var bossData = Bosses.GetBossDataFromId(log.Encounter.BossId);
                    if (!(bossData is null))
                    {
                        bossName = bossData.Name + (log.ChallengeMode ? " CM" : string.Empty);
                    }
                    var duration    = (log.ExtraJSON is null) ? string.Empty : $" {log.ExtraJSON.Duration}";
                    var successText = (logSessionSettings.ShowSuccess) ? ((log.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : string.Empty;
                    builderSuccessFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Fractal logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Fractal logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Fractal logs:***\n");
                        }
                    }
                }
            }
            if (StrikeLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Strike mission logs:***\n");
                foreach (var log in StrikeLogs)
                {
                    var bossName = log.Encounter.Boss;
                    var bossData = Bosses.GetBossDataFromId(log.Encounter.BossId);
                    if (!(bossData is null))
                    {
                        bossName = bossData.Name;
                    }
                    var duration    = (log.ExtraJSON is null) ? string.Empty : $" {log.ExtraJSON.Duration}";
                    var successText = (logSessionSettings.ShowSuccess) ? ((log.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : string.Empty;
                    builderSuccessFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Strike mission logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Strike mission logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Strike mission logs:***\n");
                        }
                    }
                }
            }
            if (GolemLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Golem logs:***\n");
                foreach (var log in GolemLogs)
                {
                    builderSuccessFailure.Append($"{log.Permalink}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Golem logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"{log.Permalink}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Golem logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"{log.Permalink}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Golem logs:***\n");
                        }
                    }
                }
            }
            if (WvWLogs.Count > 0)
            {
                if (logSessionSettings.MakeWvWSummaryEmbed)
                {
                    var totalEnemyKills = WvWLogs.Select(x =>
                                                         x.ExtraJSON?.Players
                                                         .Where(y => !y.FriendNPC && !y.NotInSquad)
                                                         .Select(y => y.StatsTargets.Select(z => z.First().Killed).Sum())
                                                         .Sum()
                                                         ?? 0)
                                          .Sum();
                    var totalSquadDeaths = WvWLogs.Select(x =>
                                                          x.ExtraJSON?.Players
                                                          .Where(y => !y.FriendNPC && !y.NotInSquad)
                                                          .Select(y => y.Defenses.First().DeadCount)
                                                          .Sum()
                                                          ?? 0)
                                           .Sum();
                    discordEmbedSummary = MakeEmbedFromText($"{logSessionSettings.Name} - WvW Summary", $"{durationText}\n\n" +
                                                            $"Total kills: **{totalEnemyKills}**\nTotal kills per minute: **{Math.Round(totalEnemyKills / logSessionSettings.ElapsedTimeSpan.TotalMinutes, 3).ToString(CultureInfo.InvariantCulture.NumberFormat)}**\n\n" +
                                                            $"Total squad deaths: **{totalSquadDeaths}**\nTotal squad deaths per minute: **{Math.Round(totalSquadDeaths / logSessionSettings.ElapsedTimeSpan.TotalMinutes, 3).ToString(CultureInfo.InvariantCulture.NumberFormat)}**");
                    discordEmbedSummary.Thumbnail = defaultWvWSummaryThumbnail;
                }
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***WvW logs:***\n");
                foreach (var log in WvWLogs)
                {
                    builderSuccessFailure.Append($"{log.Permalink}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***WvW logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"{log.Permalink}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***WvW logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"{log.Permalink}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***WvW logs:***\n");
                        }
                    }
                }
            }
            if (OtherLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Other logs:***\n");
                foreach (var log in OtherLogs)
                {
                    var bossName = log.Encounter.Boss;
                    var bossData = Bosses.GetBossDataFromId(log.Encounter.BossId);
                    if (!(bossData is null))
                    {
                        bossName = bossData.Name;
                    }
                    var duration    = (log.ExtraJSON is null) ? string.Empty : $" {log.ExtraJSON.Duration}";
                    var successText = (logSessionSettings.ShowSuccess) ? ((log.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : string.Empty;
                    builderSuccessFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Other logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Other logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Other logs:***\n");
                        }
                    }
                }
            }
            if (!builderSuccessFailure.ToString().EndsWith("***\n"))
            {
                messageSuccessFailureCount++;
                discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : string.Empty), builderSuccessFailure.ToString()));
            }
            if (!builderSuccess.ToString().EndsWith("***\n"))
            {
                messageSuccessCount++;
                discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : string.Empty), builderSuccess.ToString()));
            }
            if (!builderFailure.ToString().EndsWith("***\n"))
            {
                messageFailureCount++;
                discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : string.Empty), builderFailure.ToString()));
            }
            if (!(discordEmbedSummary is null))
            {
                discordEmbedsSuccessFailure.Insert(0, discordEmbedSummary);
                discordEmbedsSuccess.Insert(0, discordEmbedSummary);
                discordEmbedsFailure.Insert(0, discordEmbedSummary);
            }
            return(new DiscordEmbeds()
            {
                Summary = discordEmbedSummary, SuccessFailure = discordEmbedsSuccessFailure, Success = discordEmbedsSuccess, Failure = discordEmbedsFailure
            });
        }
 public static void DoUpdate()
 {
     // current version check
     if (Properties.Settings.Default.SavedVersion.Equals(Properties.Settings.Default.ReleaseVersion))
     {
         return;
     }
     /// start of updates
     #region Release 55
     if (Properties.Settings.Default.SavedVersion < 55)
     {
         /// add Freezie
         try
         {
             Dictionary <int, BossData> bosses = Bosses.FromFile($@"{localDir}\boss_data.txt");
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.Freezie)).Count() == 0)
             {
                 BossData freezie = new BossData()
                 {
                     BossId = (int)BossIds.Freezie, Name = "Freezie", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://dps.report/cache/https_wiki.guildwars2.com_images_thumb_8_8b_Freezie.jpg_189px-Freezie.jpg", Type = BossType.Strike
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", freezie.ToString(true));
             }
         }
         catch
         {
             // do nothing, since the file does not exist, or is corrupted (data does not line up)
         }
     }
     #endregion
     #region Release 56
     if (Properties.Settings.Default.SavedVersion < 56)
     {
         /// add Voice & Claw Kodas, Boneskinner, Fraenir and Whisper strike missions
         try
         {
             Dictionary <int, BossData> bosses = Bosses.FromFile($@"{localDir}\boss_data.txt");
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.TheVoiceAndTheClawOfTheFallen)).Count() == 0)
             {
                 BossData kodas = new BossData()
                 {
                     BossId = (int)BossIds.TheVoiceAndTheClawOfTheFallen, Name = "The Voice and The Claw of the Fallen", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://i.imgur.com/lNXXbnC.png", Type = BossType.Strike
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", kodas.ToString(true));
             }
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.Boneskinner)).Count() == 0)
             {
                 BossData boneskinner = new BossData()
                 {
                     BossId = (int)BossIds.Boneskinner, Name = "Boneskinner", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://i.imgur.com/meYwQmA.png", Type = BossType.Strike
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", boneskinner.ToString(true));
             }
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.FraenirOfJormag)).Count() == 0)
             {
                 BossData fraenir = new BossData()
                 {
                     BossId = (int)BossIds.FraenirOfJormag, Name = "Fraenir of Jormag", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://dps.report/cache/https_wiki.guildwars2.com_images_thumb_6_67_Fraenir_of_Jormag.jpg_208px-Fraenir_of_Jormag.jpg", Type = BossType.Strike
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", fraenir.ToString(true));
             }
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.WhisperOfJormag)).Count() == 0)
             {
                 BossData whisper = new BossData()
                 {
                     BossId = (int)BossIds.WhisperOfJormag, Name = "Whisper of Jormag", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://wiki.guildwars2.com/images/c/c0/Mini_Whisper_of_Jormag.png", Type = BossType.Strike
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", whisper.ToString(true));
             }
         }
         catch
         {
             // do nothing, since the file does not exist, or is corrupted (data does not line up)
         }
     }
     #endregion
     #region Release 57
     if (Properties.Settings.Default.SavedVersion < 57)
     {
         /// add another parameter for webhook txt file
         try
         {
             List <string> lines = new List <string>();
             using (StreamReader reader = new StreamReader($@"{localDir}\discord_webhooks.txt"))
             {
                 string line = reader.ReadLine();
                 lines.Add(line);
                 while ((line = reader.ReadLine()) != null)
                 {
                     lines.Add($"{line}<;>");
                 }
             }
             File.WriteAllLines($@"{localDir}\discord_webhooks.txt", lines);
         }
         catch
         {
             // do nothing, since the file does not exist, or is corrupted (data does not line up)
         }
     }
     #endregion
     #region Release 62
     if (Properties.Settings.Default.SavedVersion < 62)
     {
         /// add Freezie
         try
         {
             Dictionary <int, BossData> bosses = Bosses.FromFile($@"{localDir}\boss_data.txt");
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.VariniaStormsounder)).Count() == 0)
             {
                 BossData coldWar = new BossData()
                 {
                     BossId = (int)BossIds.VariniaStormsounder, Name = "Varinia Stormsounder (Cold War)", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://i.imgur.com/r9b2oww.png", Type = BossType.Strike
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", coldWar.ToString(true));
             }
         }
         catch
         {
             // do nothing, since the file does not exist, or is corrupted (data does not line up)
         }
     }
     #endregion
     #region Release 63
     if (Properties.Settings.Default.SavedVersion < 63)
     {
         /// add Freezie
         try
         {
             Dictionary <int, BossData> bosses = Bosses.FromFile($@"{localDir}\boss_data.txt");
             if (bosses.Where(x => x.Value.BossId.Equals((int)BossIds.AiKeeperOfThePeak)).Count() == 0)
             {
                 BossData ai = new BossData()
                 {
                     BossId = (int)BossIds.AiKeeperOfThePeak, Name = "Ai, Keeper of the Peak", SuccessMsg = Properties.Settings.Default.BossTemplateSuccess, FailMsg = Properties.Settings.Default.BossTemplateFail, Icon = "https://plenbot.net/img/ai_icon.png", Type = BossType.Fractal
                 };
                 File.AppendAllText($@"{localDir}\boss_data.txt", ai.ToString(true));
             }
         }
         catch
         {
             // do nothing, since the file does not exist, or is corrupted (data does not line up)
         }
     }
     #endregion
     /// end of release specific updates
     Properties.Settings.Default.SavedVersion = Properties.Settings.Default.ReleaseVersion;
     Properties.Settings.Default.Save();
     Properties.Settings.Default.Upgrade();
     Properties.Settings.Default.Save();
 }
示例#26
0
 public void AddBoss(Fighter boss)
 {
     Bosses.Add(boss);
 }
示例#27
0
        public static DiscordEmbeds ConstructSessionEmbeds(List <DPSReportJSON> reportsJSON, LogSessionSettings logSessionSettings)
        {
            List <DiscordAPIJSONContentEmbed> discordEmbedsSuccessFailure = new List <DiscordAPIJSONContentEmbed>();
            List <DiscordAPIJSONContentEmbed> discordEmbedsSuccess        = new List <DiscordAPIJSONContentEmbed>();
            List <DiscordAPIJSONContentEmbed> discordEmbedsFailure        = new List <DiscordAPIJSONContentEmbed>();

            var RaidLogs = reportsJSON
                           .Where(x => Bosses.GetWingForBoss(x.EVTC.BossId) > 0)
                           .Select(x => new { LogData = x, RaidWing = Bosses.GetWingForBoss(x.EVTC.BossId) })
                           .OrderBy(x => x.LogData.UploadTime)
                           .ToList();

            if (logSessionSettings.SortBy.Equals(LogSessionSortBy.Wing))
            {
                RaidLogs = reportsJSON
                           .Where(x => Bosses.GetWingForBoss(x.EVTC.BossId) > 0)
                           .Select(x => new { LogData = x, RaidWing = Bosses.GetWingForBoss(x.EVTC.BossId) })
                           .OrderBy(x => Bosses.GetWingForBoss(x.LogData.EVTC.BossId))
                           .ThenBy(x => Bosses.GetBossOrder(x.LogData.Encounter.BossId))
                           .ThenBy(x => x.LogData.UploadTime)
                           .ToList();
            }
            List <DPSReportJSON> FractalLogs = reportsJSON
                                               .Where(x => allBosses
                                                      .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                                      .Where(y => y.Value.Type.Equals(BossType.Fractal))
                                                      .Count() > 0)
                                               .ToList();
            List <DPSReportJSON> StrikeLogs = reportsJSON
                                              .Where(x => allBosses
                                                     .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                                     .Where(y => y.Value.Type.Equals(BossType.Strike))
                                                     .Count() > 0)
                                              .ToList();
            List <DPSReportJSON> GolemLogs = reportsJSON
                                             .Where(x => allBosses
                                                    .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                                    .Where(y => y.Value.Type.Equals(BossType.Golem))
                                                    .Count() > 0)
                                             .ToList();
            List <DPSReportJSON> WvWLogs = reportsJSON
                                           .Where(x => allBosses
                                                  .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                                  .Where(y => y.Value.Type.Equals(BossType.WvW))
                                                  .Count() > 0)
                                           .ToList();
            List <DPSReportJSON> OtherLogs = reportsJSON
                                             .Where(x => allBosses
                                                    .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                                    .Where(y => y.Value.Type.Equals(BossType.None))
                                                    .Count() > 0 || allBosses
                                                    .Where(y => y.Value.BossId.Equals(x.EVTC.BossId))
                                                    .Count() == 0)
                                             .ToList();

            string        durationText = $"Session duration: {logSessionSettings.ElapsedTime}\n\n";
            StringBuilder builderSuccessFailure = new StringBuilder(durationText);
            StringBuilder builderSuccess = new StringBuilder(durationText);
            StringBuilder builderFailure = new StringBuilder(durationText);
            int           messageSuccessFailureCount = 0, messageSuccessCount = 0, messageFailureCount = 0;

            if (RaidLogs.Count > 0)
            {
                builderSuccessFailure.Append("***Raid logs:***\n");
                if (logSessionSettings.SortBy.Equals(LogSessionSortBy.UploadTime))
                {
                    foreach (var data in RaidLogs)
                    {
                        string   bossName = data.LogData.Encounter.Boss + (data.LogData.ChallengeMode ? " CM" : "");
                        BossData bossData = Bosses.GetBossDataFromId(data.LogData.Encounter.BossId);
                        if (bossData != null)
                        {
                            bossName = bossData.Name + (data.LogData.ChallengeMode ? " CM" : "");
                        }
                        string duration    = (data.LogData.ExtraJSON == null) ? "" : $" {data.LogData.ExtraJSON.Duration}";
                        string successText = (logSessionSettings.ShowSuccess) ? ((data.LogData.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : "";
                        builderSuccessFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                        if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessFailureCount++;
                            discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                            builderSuccessFailure.Clear();
                            builderSuccessFailure.Append("***Raid logs:***\n");
                        }
                        if (data.LogData.Encounter.Success ?? false)
                        {
                            builderSuccess.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderSuccess.Length >= maxAllowedMessageSize)
                            {
                                messageSuccessCount++;
                                discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                                builderSuccess.Clear();
                                builderSuccess.Append("***Raid logs:***\n");
                            }
                        }
                        else
                        {
                            builderFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderFailure.Length >= maxAllowedMessageSize)
                            {
                                messageFailureCount++;
                                discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                                builderFailure.Clear();
                                builderFailure.Append("***Raid logs:***\n");
                            }
                        }
                    }
                }
                else
                {
                    int lastWing = 0;
                    foreach (var data in RaidLogs)
                    {
                        if (!lastWing.Equals(Bosses.GetWingForBoss(data.LogData.EVTC.BossId)))
                        {
                            builderSuccessFailure.Append($"**{Bosses.GetWingName(data.RaidWing)} (wing {data.RaidWing})**\n");
                            lastWing = Bosses.GetWingForBoss(data.LogData.EVTC.BossId);
                        }
                        string   bossName = data.LogData.Encounter.Boss + (data.LogData.ChallengeMode ? " CM" : "");
                        BossData bossData = Bosses.GetBossDataFromId(data.LogData.Encounter.BossId);
                        if (bossData != null)
                        {
                            bossName = bossData.Name + (data.LogData.ChallengeMode ? " CM" : "");
                        }
                        string duration    = (data.LogData.ExtraJSON == null) ? "" : $" {data.LogData.ExtraJSON.Duration}";
                        string successText = (logSessionSettings.ShowSuccess) ? ((data.LogData.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : "";
                        builderSuccessFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                        if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessFailureCount++;
                            discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                            builderSuccessFailure.Clear();
                            builderSuccessFailure.Append($"**{Bosses.GetWingName(data.RaidWing)} (wing {data.RaidWing})**\n");
                        }
                        if (data.LogData.Encounter.Success ?? false)
                        {
                            builderSuccess.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderSuccess.Length >= maxAllowedMessageSize)
                            {
                                messageSuccessCount++;
                                discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                                builderSuccess.Clear();
                                builderSuccess.Append("***Raid logs:***\n");
                            }
                        }
                        else
                        {
                            builderFailure.Append($"[{bossName}]({data.LogData.Permalink}){duration}{successText}\n");
                            if (builderFailure.Length >= maxAllowedMessageSize)
                            {
                                messageFailureCount++;
                                discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                                builderFailure.Clear();
                                builderFailure.Append("***Raid logs:***\n");
                            }
                        }
                    }
                }
            }
            if (FractalLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Fractal logs:***\n");
                foreach (DPSReportJSON log in FractalLogs)
                {
                    string   bossName = log.Encounter.Boss;
                    BossData bossData = Bosses.GetBossDataFromId(log.Encounter.BossId);
                    if (bossData != null)
                    {
                        bossName = bossData.Name + (log.ChallengeMode ? " CM" : "");
                    }
                    string duration    = (log.ExtraJSON == null) ? "" : $" {log.ExtraJSON.Duration}";
                    string successText = (logSessionSettings.ShowSuccess) ? ((log.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : "";
                    builderSuccessFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Fractal logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Fractal logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Fractal logs:***\n");
                        }
                    }
                }
            }
            if (StrikeLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Strike mission logs:***\n");
                foreach (DPSReportJSON log in StrikeLogs)
                {
                    string   bossName = log.Encounter.Boss;
                    BossData bossData = Bosses.GetBossDataFromId(log.Encounter.BossId);
                    if (bossData != null)
                    {
                        bossName = bossData.Name;
                    }
                    string duration    = (log.ExtraJSON == null) ? "" : $" {log.ExtraJSON.Duration}";
                    string successText = (logSessionSettings.ShowSuccess) ? ((log.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : "";
                    builderSuccessFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Strike mission logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Strike mission logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Strike mission logs:***\n");
                        }
                    }
                }
            }
            if (GolemLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Golem logs:***\n");
                foreach (DPSReportJSON log in GolemLogs)
                {
                    builderSuccessFailure.Append($"{log.Permalink}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Golem logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"{log.Permalink}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Golem logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"{log.Permalink}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Golem logs:***\n");
                        }
                    }
                }
            }
            if (WvWLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***WvW logs:***\n");
                foreach (DPSReportJSON log in WvWLogs)
                {
                    builderSuccessFailure.Append($"{log.Permalink}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***WvW logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"{log.Permalink}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***WvW logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"{log.Permalink}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***WvW logs:***\n");
                        }
                    }
                }
            }
            if (OtherLogs.Count > 0)
            {
                if (!builderSuccessFailure.ToString().EndsWith("***\n"))
                {
                    builderSuccessFailure.Append("\n\n");
                }
                builderSuccessFailure.Append("***Other logs:***\n");
                foreach (DPSReportJSON log in OtherLogs)
                {
                    string   bossName = log.Encounter.Boss;
                    BossData bossData = Bosses.GetBossDataFromId(log.Encounter.BossId);
                    if (bossData != null)
                    {
                        bossName = bossData.Name;
                    }
                    string duration    = (log.ExtraJSON == null) ? "" : $" {log.ExtraJSON.Duration}";
                    string successText = (logSessionSettings.ShowSuccess) ? ((log.Encounter.Success ?? false) ? " :white_check_mark:" : " ❌") : "";
                    builderSuccessFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                    if (builderSuccessFailure.Length >= maxAllowedMessageSize)
                    {
                        messageSuccessFailureCount++;
                        discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
                        builderSuccessFailure.Clear();
                        builderSuccessFailure.Append("***Other logs:***\n");
                    }
                    if (log.Encounter.Success ?? false)
                    {
                        builderSuccess.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderSuccess.Length >= maxAllowedMessageSize)
                        {
                            messageSuccessCount++;
                            discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
                            builderSuccess.Clear();
                            builderSuccess.Append("***Other logs:***\n");
                        }
                    }
                    else
                    {
                        builderFailure.Append($"[{bossName}]({log.Permalink}){duration}{successText}\n");
                        if (builderFailure.Length >= maxAllowedMessageSize)
                        {
                            messageFailureCount++;
                            discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
                            builderFailure.Clear();
                            builderFailure.Append("***Other logs:***\n");
                        }
                    }
                }
            }
            if (!builderSuccessFailure.ToString().EndsWith("***\n"))
            {
                messageSuccessFailureCount++;
                discordEmbedsSuccessFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessFailureCount > 1) ? $" part {messageSuccessFailureCount}" : ""), builderSuccessFailure.ToString()));
            }
            if (!builderSuccess.ToString().EndsWith("***\n"))
            {
                messageSuccessCount++;
                discordEmbedsSuccess.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageSuccessCount > 1) ? $" part {messageSuccessCount}" : ""), builderSuccess.ToString()));
            }
            if (!builderFailure.ToString().EndsWith("***\n"))
            {
                messageFailureCount++;
                discordEmbedsFailure.Add(MakeEmbedFromText(logSessionSettings.Name + ((messageFailureCount > 1) ? $" part {messageFailureCount}" : ""), builderFailure.ToString()));
            }
            return(new DiscordEmbeds()
            {
                SuccessFailure = discordEmbedsSuccessFailure, Success = discordEmbedsSuccess, Failure = discordEmbedsFailure
            });
        }
示例#28
0
 public bool IsBossDefeated(Bosses boss)
 {
     return(false);
 }
示例#29
0
        public async Task ExecuteAllActiveWebhooksAsync(DPSReportJSON reportJSON)
        {
            string   bossName      = reportJSON.Encounter.Boss + (reportJSON.ChallengeMode ? " CM" : "");
            string   successString = (reportJSON.Encounter.Success ?? false) ? ":white_check_mark:" : "❌";
            string   extraJSON     = (reportJSON.ExtraJSON == null) ? "" : $"Recorded by: {reportJSON.ExtraJSON.RecordedBy}\nDuration: {reportJSON.ExtraJSON.Duration}\nElite Insights version: {reportJSON.ExtraJSON.EliteInsightsVersion}\n";
            string   icon          = "";
            BossData bossData      = Bosses.GetBossDataFromId(reportJSON.Encounter.BossId);

            if (bossData != null)
            {
                bossName = bossData.Name + (reportJSON.ChallengeMode ? " CM" : "");
                icon     = bossData.Icon;
            }
            int color = (reportJSON.Encounter.Success ?? false) ? 32768 : 16711680;
            DiscordAPIJSONContentEmbedThumbnail discordContentEmbedThumbnail = new DiscordAPIJSONContentEmbedThumbnail()
            {
                Url = icon
            };
            DateTime timestampDateTime = DateTime.UtcNow;

            if (DateTime.TryParse(reportJSON.ExtraJSON.TimeStart, out DateTime timeStart))
            {
                timestampDateTime = timeStart;
            }
            string timestamp = timestampDateTime.ToString("yyyy'-'MM'-'ddTHH':'mm':'ssZ");
            DiscordAPIJSONContentEmbed discordContentEmbed = new DiscordAPIJSONContentEmbed()
            {
                Title       = bossName,
                Url         = reportJSON.Permalink,
                Description = $"{extraJSON}Result: {successString}\narcdps version: {reportJSON.EVTC.Type}{reportJSON.EVTC.Version}",
                Color       = color,
                TimeStamp   = timestamp,
                Thumbnail   = discordContentEmbedThumbnail
            };
            DiscordAPIJSONContent discordContentWithoutPlayers = new DiscordAPIJSONContent()
            {
                Embeds = new List <DiscordAPIJSONContentEmbed>()
                {
                    discordContentEmbed
                }
            };
            DiscordAPIJSONContentEmbed discordContentEmbedForPlayers = new DiscordAPIJSONContentEmbed()
            {
                Title       = bossName,
                Url         = reportJSON.Permalink,
                Description = $"{extraJSON}Result: {successString}\narcdps version: {reportJSON.EVTC.Type}{reportJSON.EVTC.Version}",
                Color       = color,
                TimeStamp   = timestamp,
                Thumbnail   = discordContentEmbedThumbnail
            };

            if (reportJSON.Players.Values.Count <= 10)
            {
                List <DiscordAPIJSONContentEmbedField> fields = new List <DiscordAPIJSONContentEmbedField>();
                foreach (DPSReportJSONPlayers player in reportJSON.Players.Values)
                {
                    fields.Add(new DiscordAPIJSONContentEmbedField()
                    {
                        Name = player.CharacterName, Value = $"```\n{player.DisplayName}\n\n{Players.ResolveSpecName(player.Profession, player.EliteSpec)}\n```", Inline = true
                    });
                }
                discordContentEmbedForPlayers.Fields = fields;
            }
            DiscordAPIJSONContent discordContentWithPlayers = new DiscordAPIJSONContent()
            {
                Embeds = new List <DiscordAPIJSONContentEmbed>()
                {
                    discordContentEmbedForPlayers
                }
            };

            try
            {
                string jsonContentWithoutPlayers = JsonConvert.SerializeObject(discordContentWithoutPlayers);
                string jsonContentWithPlayers    = JsonConvert.SerializeObject(discordContentWithPlayers);
                foreach (int key in allWebhooks.Keys)
                {
                    DiscordWebhookData webhook = allWebhooks[key];
                    if (!webhook.Active ||
                        (webhook.SuccessFailToggle.Equals(DiscordWebhookDataSuccessToggle.OnSuccessOnly) && !(reportJSON.Encounter.Success ?? false)) ||
                        (webhook.SuccessFailToggle.Equals(DiscordWebhookDataSuccessToggle.OnFailOnly) && (reportJSON.Encounter.Success ?? false)) ||
                        webhook.BossesDisable.Contains(reportJSON.Encounter.BossId))
                    {
                        continue;
                    }
                    Uri uri = new Uri(webhook.URL);
                    if (webhook.ShowPlayers)
                    {
                        using (StringContent content = new StringContent(jsonContentWithPlayers, Encoding.UTF8, "application/json"))
                        {
                            using (await mainLink.HttpClientController.PostAsync(uri, content)) { }
                        }
                    }
                    else
                    {
                        using (StringContent content = new StringContent(jsonContentWithoutPlayers, Encoding.UTF8, "application/json"))
                        {
                            using (await mainLink.HttpClientController.PostAsync(uri, content)) { }
                        }
                    }
                }
                if (allWebhooks.Count > 0)
                {
                    mainLink.AddToText(">:> All active webhooks successfully executed.");
                }
            }
            catch
            {
                mainLink.AddToText(">:> Unable to execute active webhooks.");
            }
        }