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>(); }
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; }
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(); } }
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; } }
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); }
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 + " пробудился"); } } } } } } }
public Main() { InitializeComponent(); db = new CrmContext(); dung = new Dungeon(character); bosses = new Bosses(Name, db.Players.FirstOrDefault()) { KillBoss = false }; }
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]); }
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()); } }
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); }
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."); } }
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! } } }
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); } } }
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); }
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); } } } }
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 }); } }
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 }); } } }
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); } }
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)); } }
public Boss GetBoss(int bossId) { return(Bosses.First(b => b.Id == bossId)); }
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."); } } }
private void FormBossData_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; Hide(); Bosses.SaveToJson(allBosses); }
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(); }
public void AddBoss(Fighter boss) { Bosses.Add(boss); }
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 }); }
public bool IsBossDefeated(Bosses boss) { return(false); }
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."); } }