From 1d0d4a5d681eab9731354d65b202474f77ff93e4 Mon Sep 17 00:00:00 2001 From: Foglio Date: Wed, 1 Nov 2023 13:54:07 +0100 Subject: [PATCH] fix bloodpact skill cooldown --- TCC.Core/Data/Databases/SkillsDatabase.cs | 59 +++---------------- .../UI/Controls/Skills/SkillControlBase.cs | 1 - .../Widgets/CooldownWindowViewModel.cs | 9 ++- 3 files changed, 14 insertions(+), 55 deletions(-) diff --git a/TCC.Core/Data/Databases/SkillsDatabase.cs b/TCC.Core/Data/Databases/SkillsDatabase.cs index 5f9713b4..89da366b 100644 --- a/TCC.Core/Data/Databases/SkillsDatabase.cs +++ b/TCC.Core/Data/Databases/SkillsDatabase.cs @@ -21,51 +21,6 @@ public SkillsDatabase(string lang) : base(lang) } - /* - private string FindSkillNameByIdClass(uint id, Class c) - { - if (Skills[c].TryGetValue(id, out var sk)) - { - return sk.Name; - } - else return "Not found"; - - } - */ - - /* - private int GetSkillIdByConnectedId(uint id, Class c) - { - foreach (var skillConnection in SkillConnections.Where(x => x.Class == c)) - { - foreach (var connectedSkill in skillConnection.ConnectedSkills) - { - if ((int)id == connectedSkill) - { - return skillConnection.Id; - } - } - } - return -1; - } - */ - /* - public string SkillIdToName(uint id, Class c) - { - var name = FindSkillNameByIdClass(id, c); - var connSkill = GetSkillIdByConnectedId(id, c); - - if (name != "Not found") //found skill - { - return name; - } - else if (connSkill != -1) //skill found in connected skills - { - name = FindSkillNameByIdClass(id, c); - } - return name; - } - */ public bool TryGetSkill(uint id, Class c, out Skill sk) { var result = false; @@ -75,18 +30,20 @@ public bool TryGetSkill(uint id, Class c, out Skill sk) result = true; return result; - } //TODO do this better one day - public IEnumerable SkillsForClass(Class c) + public IEnumerable SkillsForClass(Class c, bool includeCommon = true) { - var list = new ThreadSafeObservableCollection(); var skillsForClass = Skills[c]; - foreach (var skill in skillsForClass.Values.Where(skill => list.All(x => x.IconName != skill.IconName) - && !IsIgnoredSkill(skill))) + + var list = skillsForClass.Values.Where(skill => !IsIgnoredSkill(skill)) + .DistinctBy(x => x.IconName) + .ToList(); + + if (includeCommon) { - list.Add(skill); + list.AddRange(Skills[Class.Common].Values.Where(skill => skill.Detail is not "mount" and not "eventseed")); } return list; } diff --git a/TCC.Core/UI/Controls/Skills/SkillControlBase.cs b/TCC.Core/UI/Controls/Skills/SkillControlBase.cs index 12835296..5db9c64b 100644 --- a/TCC.Core/UI/Controls/Skills/SkillControlBase.cs +++ b/TCC.Core/UI/Controls/Skills/SkillControlBase.cs @@ -73,7 +73,6 @@ protected virtual void OnLoaded(object sender, RoutedEventArgs e) } protected virtual void OnUnloaded(object sender, RoutedEventArgs e) //TODO: maybe use DataContextChanged { - Loaded -= OnLoaded; Unloaded -= OnUnloaded; if (Context == null) { diff --git a/TCC.Core/ViewModels/Widgets/CooldownWindowViewModel.cs b/TCC.Core/ViewModels/Widgets/CooldownWindowViewModel.cs index c77473d7..d26371ae 100644 --- a/TCC.Core/ViewModels/Widgets/CooldownWindowViewModel.cs +++ b/TCC.Core/ViewModels/Widgets/CooldownWindowViewModel.cs @@ -673,7 +673,10 @@ void OnStartCooltimeItem(S_START_COOLTIME_ITEM m) void OnStartCooltimeSkill(S_START_COOLTIME_SKILL m) { - if (!Game.DB!.SkillsDatabase.TryGetSkill(m.SkillId, Game.Me.Class, out var skill)) return; + if (!Game.DB!.SkillsDatabase.TryGetSkill(m.SkillId, Game.Me.Class, out var skill) + && !Game.DB!.SkillsDatabase.TryGetSkill(m.SkillId, Class.Common, out skill)) + return; + if (!Pass(skill)) return; RouteSkill(new Cooldown(skill, m.Cooldown)); } @@ -709,8 +712,8 @@ void OnPrecooldownStarted(Skill sk, uint duration) static bool Pass(Skill sk) { - if (sk.Detail == "off") return false; + if (sk.Detail is "off" or "mount" or "eventseed") return false; if (sk.Id == 245109 && Game.Me.Class == Class.Valkyrie) return false; // bad but idk - return sk.Class != Class.Common && sk.Class != Class.None; + return sk.Class != Class.None; } } \ No newline at end of file