internal static void TrackSpellOnUnit(int acdGuid, SNOPower power) { try { float duration = 0; if (CachedTrackedSpells.ContainsKey(power)) { HotbarSkills skill = HotbarSkills.AssignedSkills.FirstOrDefault(p => p.Power == power); TrackedSpell spell = TrackedSpells.FirstOrDefault(s => s.Equals(new TrackedSpell(power, skill.RuneIndex))); if (spell != null) { duration = spell.Duration; } } if (duration > 0) { //Logger.Log(TrinityLogLevel.Info, LogCategory.UserInformation, "Tracking unit {0} with power {1} for duration {2:0.00}", acdGuid, power, duration); TrackSpellOnUnit(new SpellTracker() { ACDGuid = acdGuid, Power = power, Expiration = DateTime.UtcNow.AddMilliseconds(duration) }); } } catch (Exception ex) { Logger.LogNormal("Exception in TrackSpellOnUnit: {0}", ex.ToString()); } }
/// <summary> /// Updates the cached tracked spells. Call only after updating HotbarSkills. /// </summary> internal static void RefreshCachedSpells() { CachedTrackedSpells.Clear(); foreach (HotbarSkills skill in HotbarSkills.AssignedSkills) { if (TrackedSpells.Any(s => s.Power == skill.Power && (s.RuneIndex == skill.RuneIndex || s.RuneIndex == -999))) { CachedTrackedSpells.Add(skill.Power, skill.RuneIndex); } } }
internal static void TrackSpellOnUnit(int AcdId, SNOPower power) { try { if (AcdId == 0) { return; } float duration = -1; if (Core.Hotbar.ActivePowers.Contains(power)) { // Can't track a spell that isn't equipped var skill = Core.Hotbar.GetHotbarSkill(power); var spell = TrackedSpells.FirstOrDefault(s => s.Equals(new TrackedSpell(power, skill.RuneIndex)) || s.Equals(new TrackedSpell(power, AnyRune))); if (spell != null) { duration = spell.Duration; } } var anyRune = TrackedSpells.FirstOrDefault(s => s.Power == power && s.RuneIndex == AnyRune); if (duration == -1 && anyRune != null) { duration = anyRune.Duration; } if (duration > 0) { Core.Logger.Verbose(LogCategory.Behavior, "Tracking unit {0} with power {1} for duration {2:0.00}", AcdId, power, duration); TrackSpellOnUnit(new SpellTracker() { AcdId = AcdId, Power = power, Expiration = DateTime.UtcNow.AddMilliseconds(duration) }); } } catch (Exception ex) { Core.Logger.Log("Exception in TrackSpellOnUnit: {0}", ex.ToString()); } }