/// <summary>Logs the specified level.</summary> /// <param name="level">The logging level.</param> /// <param name="category">The category.</param> /// <param name="formatMessage">The format message.</param> /// <param name="args">The parameters used when format message.</param> public static void Log(TrinityLogLevel level, LogCategory category, string formatMessage, params object[] args) { if (string.IsNullOrEmpty(prefix)) prefix = string.Format("[Trinity {0}]", Trinity.Instance.Version); if (category == LogCategory.UserInformation || level >= TrinityLogLevel.Error || (Trinity.Settings != null && Trinity.Settings.Advanced.LogCategories.HasFlag(category))) { string msg = string.Format(prefix + "{0} {1}", category != LogCategory.UserInformation ? "[" + category.ToString() + "]" : string.Empty, formatMessage); try { if (args.Length > 0) msg = string.Format(msg, args); } catch { msg = msg + " || " + args; } var key = new Tuple<LogCategory, TrinityLogLevel>(category, level); if (!LastLogMessages.ContainsKey(key)) LastLogMessages.Add(key, ""); var allowDuplicates = Trinity.Settings != null && Trinity.Settings.Advanced != null && Trinity.Settings.Advanced.AllowDuplicateMessages; string lastMessage; if (LastLogMessages.TryGetValue(key, out lastMessage) && (allowDuplicates || lastMessage != msg)) { LastLogMessages[key] = msg; switch (level) { case TrinityLogLevel.Error: _Logger.Error(msg); break; case TrinityLogLevel.Info: _Logger.Info(msg); break; case TrinityLogLevel.Verbose: _Logger.Debug(msg); break; case TrinityLogLevel.Debug: LogToTrinityDebug(msg); break; } } } }
internal static void LogInvalidItems(TrinityLogLevel level = TrinityLogLevel.Debug) { var p = Logger.Prefix; Logger.Prefix = ""; var dropItems = Legendary.ToList().Where(i => !i.IsCrafted && i.Id == 0).OrderBy(i => i.TrinityItemType).ToList(); var craftedItems = Legendary.ToList().Where(i => i.IsCrafted && i.Id == 0).OrderBy(i => i.TrinityItemType).ToList(); Logger.Log("Dropped Items: {0}", dropItems.Count); foreach (var item in dropItems) { Logger.Log("{0} - {1} = 0", item.TrinityItemType, item.Name); } Logger.Log(" "); Logger.Log("Crafted Items: {0}", craftedItems.Count); foreach (var item in craftedItems) { Logger.Log("{0} - {1} = 0", item.TrinityItemType, item.Name); } Logger.Prefix = p; }
/// <summary>Converts <see cref="TrinityLogLevel"/> to <see cref="LogLevel"/>.</summary> /// <param name="level">The trinity logging level.</param> /// <returns>DemonBuddy logging level.</returns> private static LogLevel ConvertToLogLevel(TrinityLogLevel level) { LogLevel logLevel = LogLevel.Debug; switch (level) { case TrinityLogLevel.Error: logLevel = LogLevel.Error; break; case TrinityLogLevel.Info: logLevel = LogLevel.Info; break; case TrinityLogLevel.Verbose: logLevel = LogLevel.Verbose; break; case TrinityLogLevel.Debug: logLevel = LogLevel.Debug; break; } return(logLevel); }
/// <summary>Converts <see cref="TrinityLogLevel"/> to <see cref="LogLevel"/>.</summary> /// <param name="level">The trinity logging level.</param> /// <returns>DemonBuddy logging level.</returns> private static LogLevel ConvertToLogLevel(TrinityLogLevel level) { LogLevel logLevel = LogLevel.Debug; switch (level) { case TrinityLogLevel.Error: logLevel = LogLevel.Error; break; case TrinityLogLevel.Info: logLevel = LogLevel.Info; break; case TrinityLogLevel.Verbose: logLevel = LogLevel.Verbose; break; case TrinityLogLevel.Debug: logLevel = LogLevel.Debug; break; } return logLevel; }
internal static void LogInvalidItems(TrinityLogLevel level = TrinityLogLevel.Debug) { var p = Logger.Prefix; Logger.Prefix = ""; var dropItems = Legendary.ToList().Where(i => !i.IsCrafted && i.Id==0).OrderBy(i => i.TrinityItemType).ToList(); var craftedItems = Legendary.ToList().Where(i => i.IsCrafted && i.Id==0).OrderBy(i => i.TrinityItemType).ToList(); Logger.Log("Dropped Items: {0}", dropItems.Count); foreach (var item in dropItems) { Logger.Log("{0} - {1} = 0", item.TrinityItemType, item.Name); } Logger.Log(" "); Logger.Log("Crafted Items: {0}", craftedItems.Count); foreach (var item in craftedItems) { Logger.Log("{0} - {1} = 0", item.TrinityItemType, item.Name); } Logger.Prefix = p; }
internal static void DumpReferenceItems(TrinityLogLevel level = TrinityLogLevel.Debug) { var path = Path.Combine(FileManager.DemonBuddyPath, "Resources\\JS Class Generator\\ItemReference.js"); if(File.Exists(path)) File.Delete(path); using (StreamWriter w = File.AppendText(path)) { w.WriteLine("var itemLookup = {"); foreach (var item in Legendary.ToList()) { if(item.Id!=0) w.WriteLine(string.Format(" \"{0}\": [\"{1}\", {2}, \"{3}\"],",item.Slug, item.Name, item.Id, item.InternalName)); } w.WriteLine("}"); } Logger.Log("Dumped Reference Items to: {0}", path); }
public static void LogSystemInformation(TrinityLogLevel level = TrinityLogLevel.Debug) { Logger.Log(level, LogCategory.UserInformation, "------ System Information ------"); Logger.Log(level, LogCategory.UserInformation, "Processor: " + SystemInformation.Processor); Logger.Log(level, LogCategory.UserInformation, "Current Speed: " + SystemInformation.ActualProcessorSpeed); Logger.Log(level, LogCategory.UserInformation, "Operating System: " + SystemInformation.OperatingSystem); Logger.Log(level, LogCategory.UserInformation, "Motherboard: " + SystemInformation.MotherBoard); Logger.Log(level, LogCategory.UserInformation, "System Type: " + SystemInformation.SystemType); Logger.Log(level, LogCategory.UserInformation, "Free Physical Memory: " + SystemInformation.FreeMemory); Logger.Log(level, LogCategory.UserInformation, "Hard Drive: " + SystemInformation.HardDisk); Logger.Log(level, LogCategory.UserInformation, "Video Card: " + SystemInformation.VideoCard); Logger.Log(level, LogCategory.UserInformation, "Resolution: " + SystemInformation.Resolution); }
public static void LogBuildAndItems(TrinityLogLevel level = TrinityLogLevel.Info) { try { using (new MemoryHelper()) { Action<Item, TrinityLogLevel> logItem = (i, l) => { Logger.Log(l, LogCategory.UserInformation, string.Format("Item: {0}: {1} ({2}) is Equipped", i.ItemType, i.Name, i.Id)); }; if (ZetaDia.Me == null || !ZetaDia.Me.IsValid) { Logger.Log("Error: Not in game"); return; } if (!ZetaDia.Me.Inventory.Equipped.Any()) { Logger.Log("Error: No equipped items detected"); return; } LogNewItems(); Logger.Log(level, LogCategory.UserInformation, "------ Equipped Legendaries: Items={0}, Sets={1} ------", Legendary.Equipped.Count, Sets.Equipped.Count); Legendary.Equipped.Where(c => !c.IsSetItem || !c.Set.IsEquipped).ForEach(i => logItem(i, level)); Sets.Equipped.ForEach(s => { Logger.Log(level, LogCategory.UserInformation, "------ Set: {0} {1}: {2}/{3} Equipped. ActiveBonuses={4}/{5} ------", s.Name, s.IsClassRestricted ? "(" + s.ClassRestriction + ")" : string.Empty, s.EquippedItems.Count, s.Items.Count, s.CurrentBonuses, s.MaxBonuses); s.Items.Where(i => i.IsEquipped).ForEach(i => logItem(i, level)); }); Logger.Log(level, LogCategory.UserInformation, "------ Active Skills / Runes ------", SkillUtils.Active.Count, SkillUtils.Active.Count); Action<Skill> logSkill = s => { Logger.Log(level, LogCategory.UserInformation, "Skill: {0} Rune={1} Type={2}", s.Name, s.CurrentRune.Name, (s.IsAttackSpender) ? "Spender" : (s.IsGeneratorOrPrimary) ? "Generator" : "Other" ); }; SkillUtils.Active.ForEach(logSkill); Logger.Log(level, LogCategory.UserInformation, "------ Passives ------", SkillUtils.Active.Count, SkillUtils.Active.Count); Action<Passive> logPassive = p => Logger.Log(level, LogCategory.UserInformation, "Passive: {0}", p.Name); PassiveUtils.Active.ForEach(logPassive); } } catch (Exception ex) { Logger.Log("Exception in DebugUtil > LogBuildAndItems: {0} {1}", ex.Message, ex.InnerException); } }
public void LogCounts(string msg = "", TrinityLogLevel level = TrinityLogLevel.Info) { Logger.Log(level, msg + " " + GetCountsString(Source)); }
public static void Log(TrinityLogLevel level, string formatMessage, params object[] args) { Log(level, LogCategory.UserInformation, formatMessage, args); }
public void LogCounts(string msg = "", TrinityLogLevel level = TrinityLogLevel.Info) { Logger.Log(level, msg + " " + GetCountsString(Source)); }
private static void RefreshCacheMainLoop() { using (new PerformanceLogger("CacheManagement.RefreshCacheMainLoop")) { IEnumerable <DiaObject> refreshSource; if (Settings.Advanced.LogCategories.HasFlag(LogCategory.CacheManagement)) { refreshSource = ReadDebugActorsFromMemory(); } else { refreshSource = ReadActorsFromMemory(); } Stopwatch t1 = new Stopwatch(); foreach (DiaObject currentObject in refreshSource) { try { // Objects deemed of low importance are stored from the last refresh TrinityCacheObject cachedObject; if (CacheData.LowPriorityObjectCache.TryGetValue(currentObject.RActorGuid, out cachedObject)) { cachedObject.Distance = currentObject.Distance; var timeSinceRefresh = DateTime.UtcNow.Subtract(cachedObject.LastSeenTime).TotalMilliseconds; // Determine if we should use the stored object or not if (timeSinceRefresh < Settings.Advanced.CacheLowPriorityRefreshRate && cachedObject.Distance > 12f) { cachedObject.Position = currentObject.Position; ObjectCache.Add(cachedObject); continue; } } if (!Settings.Advanced.LogCategories.HasFlag(LogCategory.CacheManagement)) { /* * Main Cache Function */ bool addToCache = CacheDiaObject(currentObject); CurrentCacheObject.IgnoreReason = c_IgnoreReason + "." + c_IgnoreSubStep; // (!addToCache ? ((c_IgnoreReason != "None" ? c_IgnoreReason + "." : "") + c_IgnoreSubStep) : ""); if (!CacheData.IgnoreReasons.ContainsKey(currentObject.RActorGuid)) { CacheData.IgnoreReasons.Add(currentObject.RActorGuid, CurrentCacheObject.IgnoreReason); } if (addToCache) { ObjectCache.Add(CurrentCacheObject); } } else { // We're debugging, slightly slower, calculate performance metrics and dump debugging to log t1.Restart(); /* * Main Cache Function */ bool addToCache = CacheDiaObject(currentObject); CurrentCacheObject.IgnoreReason = c_IgnoreReason + "." + c_IgnoreSubStep; // (!addToCache ? ((c_IgnoreReason != "None" ? c_IgnoreReason + "." : "") + c_IgnoreSubStep) : ""); if (!CacheData.IgnoreReasons.ContainsKey(currentObject.RActorGuid)) { CacheData.IgnoreReasons.Add(currentObject.RActorGuid, CurrentCacheObject.IgnoreReason); } if (addToCache) { ObjectCache.Add(CurrentCacheObject); } if (t1.IsRunning) { t1.Stop(); } double duration = t1.Elapsed.TotalMilliseconds; // don't log stuff we never care about if (duration <= 1 && c_IgnoreSubStep == "IgnoreNames") { continue; } if (CurrentCacheObject.Type == TrinityObjectType.Player) { continue; } if (c_IgnoreReason != "InternalName") { Logger.Log(TrinityLogLevel.Debug, LogCategory.CacheManagement, "[{0:0000.00}ms] {1} {2} Type={3}/{4}/{5} Name={6} ({7}) {8} {9} Dist2Mid={10:0} Dist2Rad={11:0} ZDiff={12:0} Radius={13:0} RAGuid={14} {15}", duration, (addToCache ? "Added " : "Ignored"), CurrentCacheObject.IgnoreReason, CurrentCacheObject.ActorType, CurrentCacheObject.GizmoType != GizmoType.None ? CurrentCacheObject.GizmoType.ToString() : "", CurrentCacheObject.Type, CurrentCacheObject.InternalName, CurrentCacheObject.ActorSNO, (CurrentCacheObject.IsBoss ? " IsBoss" : ""), (c_CurrentAnimation != SNOAnim.Invalid ? " Anim: " + c_CurrentAnimation : ""), CurrentCacheObject.Distance, CurrentCacheObject.RadiusDistance, c_ZDiff, CurrentCacheObject.Radius, CurrentCacheObject.RActorGuid, CurrentCacheObject.ExtraInfo); } } } catch (Exception ex) { TrinityLogLevel ll = TrinityLogLevel.Debug; LogCategory lc = LogCategory.CacheManagement; if (ex is NullReferenceException) { ll = TrinityLogLevel.Error; lc = LogCategory.UserInformation; } string gizmoType = ""; var giz = currentObject as DiaGizmo; if (giz != null && giz.CommonData.IsValid) { gizmoType = "GizmoType: " + giz.CommonData.ActorInfo.GizmoType.ToString(); } Logger.Log(ll, lc, "Error while refreshing DiaObject ActorSNO: {0} Name: {1} Type: {2} Distance: {3:0} {4} {5}", currentObject.ActorSNO, currentObject.Name, currentObject.ActorType, currentObject.Distance, gizmoType, ex); } } } }
public void LogLocation(string pre, CombatMovement movement, string post = "", TrinityLogLevel level = TrinityLogLevel.Info) { Logger.Log(level, LogCategory.Movement, pre + " {0} Distance={4:0.#} ({1:0.#},{2:0.#},{3:0.#}) {5}", movement.Name, movement.Destination.X, movement.Destination.Y, movement.Destination.Z, ZetaDia.Me.Position.Distance(movement.Destination), post); }
public static void Log(TrinityLogLevel level, string formatMessage, params object[] args) { Log(level, LogCategory.UserInformation, formatMessage, args); }
public static void LogBuildAndItems(TrinityLogLevel level = TrinityLogLevel.Info) { try { Action <Item, TrinityLogLevel> logItem = (i, l) => { Core.Logger.Log($"Item: {i.ItemType}: {i.Name} ({i.Id}) is Equipped"); }; Action <ACDItem, TrinityLogLevel> logACDItem = (i, l) => { Core.Logger.Log($"Item: {i.ItemType}: {i.Name} ({i.ActorSnoId}) is Equipped"); }; if (ZetaDia.Me == null || !ZetaDia.Me.IsValid) { Core.Logger.Log("Error: Not in game"); return; } var equipped = InventoryManager.Equipped; if (!equipped.Any()) { Core.Logger.Log("Error: No equipped items detected"); return; } LogNewItems(); var equippedItems = Legendary.Equipped.Where(c => (!c.IsSetItem || !c.Set.IsEquipped) && !c.IsEquippedInCube).ToList(); Core.Logger.Log("------ Equipped Non-Set Legendaries: Items={0}, Sets={1} ------", equippedItems.Count, Sets.Equipped.Count); equippedItems.ForEach(i => logItem(i, level)); var cubeItems = Legendary.Equipped.Where(c => c.IsEquippedInCube).ToList(); Core.Logger.Log("------ Equipped in Kanai's Cube: Items={0} ------", cubeItems.Count, Sets.Equipped.Count); cubeItems.ForEach(i => logItem(i, level)); Sets.Equipped.ForEach(s => { Core.Logger.Log("------ Set: {0} {1}: {2}/{3} Equipped. ActiveBonuses={4}/{5} ------", s.Name, s.IsClassRestricted ? "(" + s.ClassRestriction + ")" : string.Empty, s.EquippedItems.Count, s.Items.Count, s.CurrentBonuses, s.MaxBonuses); s.Items.Where(i => i.IsEquipped).ForEach(i => logItem(i, level)); }); Core.Logger.Log("------ Active Skills / Runes ------", SkillUtils.Active.Count, SkillUtils.Active.Count); Action <Skill> logSkill = s => { Core.Logger.Log("Skill: {0} Rune={1} Type={2}", s.Name, s.CurrentRune.Name, (s.IsAttackSpender) ? "Spender" : (s.IsGeneratorOrPrimary) ? "Generator" : "Other" ); }; SkillUtils.Active.ForEach(logSkill); Core.Logger.Log("------ Passives ------"); Action <Passive> logPassive = p => Core.Logger.Log("Passive: {0}", p.Name); PassiveUtils.Active.ForEach(logPassive); } catch (Exception ex) { Core.Logger.Log("Exception in DebugUtil > LogBuildAndItems: {0} {1} {2}", ex.Message, ex.InnerException, ex); } }
public void LogLocation(string pre, CombatMovement movement, string post = "", TrinityLogLevel level = TrinityLogLevel.Info) { Logger.Log(level, LogCategory.Movement, pre + " {0} Distance={4:0.#} ({1:0.#},{2:0.#},{3:0.#}) {5}", movement.Name, movement.Destination.X, movement.Destination.Y, movement.Destination.Z, ZetaDia.Me.Position.Distance(movement.Destination), post); }
private static void RefreshCacheMainLoop() { using (new PerformanceLogger("CacheManagement.RefreshCacheMainLoop")) { IEnumerable <DiaObject> refreshSource; if (Settings.Advanced.LogCategories.HasFlag(LogCategory.CacheManagement)) { refreshSource = ReadDebugActorsFromMemory(); } else { refreshSource = ReadActorsFromMemory(); } Stopwatch t1 = new Stopwatch(); foreach (DiaObject currentObject in refreshSource) { try { bool AddToCache = false; if (!Settings.Advanced.LogCategories.HasFlag(LogCategory.CacheManagement)) { /* * Main Cache Function */ AddToCache = CacheDiaObject(currentObject); } else { // We're debugging, slightly slower, calculate performance metrics and dump debugging to log t1.Reset(); t1.Start(); /* * Main Cache Function */ AddToCache = CacheDiaObject(currentObject); if (t1.IsRunning) { t1.Stop(); } double duration = t1.Elapsed.TotalMilliseconds; // don't log stuff we never care about if (duration <= 1 && c_IgnoreSubStep == "IgnoreNames") { continue; } string extraData = ""; switch (CurrentCacheObject.Type) { case GObjectType.Unit: { if (c_IsEliteRareUnique) { extraData += " IsElite " + c_MonsterAffixes.ToString(); } if (c_unit_HasShieldAffix) { extraData += " HasAffixShielded"; } if (c_HasDotDPS) { extraData += " HasDotDPS"; } if (c_HasBeenInLoS) { extraData += " HasBeenInLoS"; } extraData += " HP=" + c_HitPoints.ToString("0") + " (" + c_HitPointsPct.ToString("0.00") + ")"; } break; case GObjectType.Avoidance: { extraData += _standingInAvoidance ? "InAoE " : ""; break; } } if (c_IgnoreReason != "InternalName") { Logger.Log(TrinityLogLevel.Debug, LogCategory.CacheManagement, "[{0:0000.00}ms] {1} {2} Type: {3} ({4}/{5}) Name={6} ({7}) {8} {9} Dist2Mid={10:0} Dist2Rad={11:0} ZDiff={12:0} Radius={13:0} RAGuid={14} {15}", duration, (AddToCache ? "Added " : "Ignored"), (!AddToCache ? ("By: " + (c_IgnoreReason != "None" ? c_IgnoreReason + "." : "") + c_IgnoreSubStep) : ""), CurrentCacheObject.ActorType, CurrentCacheObject.GizmoType != GizmoType.None ? CurrentCacheObject.GizmoType.ToString() : "", CurrentCacheObject.Type, CurrentCacheObject.InternalName, CurrentCacheObject.ActorSNO, (CurrentCacheObject.IsBoss ? " IsBoss" : ""), (c_CurrentAnimation != SNOAnim.Invalid ? " Anim: " + c_CurrentAnimation : ""), CurrentCacheObject.Distance, CurrentCacheObject.RadiusDistance, c_ZDiff, CurrentCacheObject.Radius, CurrentCacheObject.RActorGuid, extraData); } } } catch (Exception ex) { TrinityLogLevel ll = TrinityLogLevel.Debug; LogCategory lc = LogCategory.CacheManagement; if (ex is NullReferenceException) { ll = TrinityLogLevel.Error; lc = LogCategory.UserInformation; } string gizmoType = ""; if (currentObject is DiaGizmo) { gizmoType = "GizmoType: " + ((DiaGizmo)currentObject).CommonData.ActorInfo.GizmoType.ToString(); } Logger.Log(ll, lc, "Error while refreshing DiaObject ActorSNO: {0} Name: {1} Type: {2} Distance: {3:0} {4} {5}", currentObject.ActorSNO, currentObject.Name, currentObject.ActorType, currentObject.Distance, gizmoType, ex.Message); } } } }