diff --git a/ArcdpsLogManager/CHANGELOG.md b/ArcdpsLogManager/CHANGELOG.md index 4e1a903a..f65fabdb 100644 --- a/ArcdpsLogManager/CHANGELOG.md +++ b/ArcdpsLogManager/CHANGELOG.md @@ -31,6 +31,7 @@ This is the full changelog of the arcdps Log Manager. - Added CrowdControlEvent (crowd control against non-defiant enemies); requires arcdps 2024-06-27 or newer. - Added old team ids to TeamChangeEvent; requires arcdps 2024-06-12 or newer. - Added RateHealthEvent (reports simulation tick rate drops when server cannot keep up/connection lags); requires arcdps 2022-05-20 or newer. +- Added AgentMarkerRemoveAllEvent; common with arcdps 2024-03-28 or newer. ## Log Manager v1.11.1 diff --git a/ArcdpsLogManager/Logs/LogData.cs b/ArcdpsLogManager/Logs/LogData.cs index 78872992..7d0cdc70 100644 --- a/ArcdpsLogManager/Logs/LogData.cs +++ b/ArcdpsLogManager/Logs/LogData.cs @@ -273,7 +273,7 @@ public void ProcessLog(LogAnalytics logAnalytics) HealthPercentage = 0; } - var tagEvents = log.Events.OfType().Where(x => x.Marker.Id != 0 && x.Agent is Player).ToList(); + var tagEvents = log.Events.OfType().Where(x => x.Agent is Player).ToList(); Players = analyzer.GetPlayers().Where(x => x.Identified).Select(p => new LogPlayer(p.Name, p.AccountName, p.Subgroup, p.Profession, p.EliteSpecialization, GetGuildGuid(p.GuildGuid)) diff --git a/EVTCAnalytics/Events/AgentEvents.cs b/EVTCAnalytics/Events/AgentEvents.cs index bf8c0277..5f9c61cb 100644 --- a/EVTCAnalytics/Events/AgentEvents.cs +++ b/EVTCAnalytics/Events/AgentEvents.cs @@ -108,13 +108,12 @@ public class AgentMaxHealthUpdateEvent(long time, Agent agent, ulong newMaxHealt } /// - /// An event specifying that an has a tag. Typically, a with a Commander tag. + /// An event specifying that an has a tag/marker. Typically, a with a Commander tag. /// /// - /// Introduced in EVTC20200609. 20240328 + /// Introduced in EVTC20200609. Prior to EVTC20240328, this only happened at the start of a log, since then it can happen at any time. /// - public class AgentMarkerEvent(long time, Agent agent, Marker marker, bool? isCommander) - : AgentEvent(time, agent) + public class AgentMarkerEvent(long time, Agent agent, Marker marker, bool? isCommander) : AgentEvent(time, agent) { public Marker Marker { get; } = marker; @@ -127,6 +126,14 @@ public class AgentMarkerEvent(long time, Agent agent, Marker marker, bool? isCom public bool? IsCommander { get; } = isCommander; } + /// + /// An event specifying that all tags/markers of an have been removed. + /// + /// + /// Commonyl used since EVTC20240328. + /// + public class AgentMarkerRemoveAllEvent(long time, Agent agent) : AgentEvent(time, agent); + /// /// An event specifying that an has an ongoing buff at the time tracking starts. /// diff --git a/EVTCAnalytics/Parsing/CombatItemFilters.cs b/EVTCAnalytics/Parsing/CombatItemFilters.cs index 1fcb8411..8e49b310 100644 --- a/EVTCAnalytics/Parsing/CombatItemFilters.cs +++ b/EVTCAnalytics/Parsing/CombatItemFilters.cs @@ -227,6 +227,7 @@ private static IEnumerable GetDirectStateChangesForEventType(Type e if (eventType == typeof(AgentWeaponSwapEvent)) return [StateChange.WeaponSwap]; if (eventType == typeof(AgentMaxHealthUpdateEvent)) return [StateChange.MaxHealthUpdate]; if (eventType == typeof(AgentMarkerEvent)) return [StateChange.Tag]; + if (eventType == typeof(AgentMarkerRemoveAllEvent)) return [StateChange.Tag]; if (eventType == typeof(InitialBuffEvent)) return [StateChange.BuffInitial]; if (eventType == typeof(PositionChangeEvent)) return [StateChange.Position]; if (eventType == typeof(VelocityChangeEvent)) return [StateChange.Velocity]; @@ -261,6 +262,7 @@ private static IEnumerable GetDirectStateChangesForEventType(Type e if (eventType == typeof(DefianceBarDamageEvent)) return []; if (eventType == typeof(RewardEvent)) return [StateChange.Reward]; + if (eventType == typeof(RateHealthEvent)) return [StateChange.TickRate]; if (eventType == typeof(CrowdControlEvent)) return []; @@ -301,6 +303,7 @@ private static bool IsDirectBuffDamage(Type eventType) if (eventType == typeof(AgentWeaponSwapEvent)) return false; if (eventType == typeof(AgentMaxHealthUpdateEvent)) return false; if (eventType == typeof(AgentMarkerEvent)) return false; + if (eventType == typeof(AgentMarkerRemoveAllEvent)) return false; if (eventType == typeof(InitialBuffEvent)) return false; if (eventType == typeof(PositionChangeEvent)) return false; if (eventType == typeof(VelocityChangeEvent)) return false; @@ -337,6 +340,7 @@ private static bool IsDirectBuffDamage(Type eventType) if (eventType == typeof(CrowdControlEvent)) return false; if (eventType == typeof(RewardEvent)) return false; + if (eventType == typeof(RateHealthEvent)) return false; if (eventType == typeof(SkillCastEvent)) return false; if (eventType == typeof(EndSkillCastEvent)) return false; @@ -373,6 +377,7 @@ private static bool IsDirectSkillCast(Type eventType) if (eventType == typeof(AgentWeaponSwapEvent)) return false; if (eventType == typeof(AgentMaxHealthUpdateEvent)) return false; if (eventType == typeof(AgentMarkerEvent)) return false; + if (eventType == typeof(AgentMarkerRemoveAllEvent)) return false; if (eventType == typeof(InitialBuffEvent)) return false; if (eventType == typeof(PositionChangeEvent)) return false; if (eventType == typeof(VelocityChangeEvent)) return false; @@ -409,6 +414,7 @@ private static bool IsDirectSkillCast(Type eventType) if (eventType == typeof(CrowdControlEvent)) return false; if (eventType == typeof(RewardEvent)) return false; + if (eventType == typeof(RateHealthEvent)) return false; if (eventType == typeof(SkillCastEvent)) return false; if (eventType == typeof(EndSkillCastEvent)) return true; @@ -445,6 +451,7 @@ private static IEnumerable GetDirectPhysicalResultsForEventType(Type eve if (eventType == typeof(AgentWeaponSwapEvent)) return []; if (eventType == typeof(AgentMaxHealthUpdateEvent)) return []; if (eventType == typeof(AgentMarkerEvent)) return []; + if (eventType == typeof(AgentMarkerEvent)) return []; if (eventType == typeof(InitialBuffEvent)) return []; if (eventType == typeof(PositionChangeEvent)) return []; if (eventType == typeof(VelocityChangeEvent)) return []; @@ -481,6 +488,7 @@ private static IEnumerable GetDirectPhysicalResultsForEventType(Type eve if (eventType == typeof(CrowdControlEvent)) return [Result.CrowdControl]; if (eventType == typeof(RewardEvent)) return []; + if (eventType == typeof(RateHealthEvent)) return []; if (eventType == typeof(SkillCastEvent)) return []; if (eventType == typeof(EndSkillCastEvent)) return []; diff --git a/EVTCAnalytics/Processing/LogProcessor.cs b/EVTCAnalytics/Processing/LogProcessor.cs index d511e982..f680eba5 100644 --- a/EVTCAnalytics/Processing/LogProcessor.cs +++ b/EVTCAnalytics/Processing/LogProcessor.cs @@ -1094,6 +1094,11 @@ static WeaponSet WeaponSetFromId(long id) return new UnknownEvent(item.Time, item); case StateChange.Tag: uint markerId = (uint) item.Value; + if (markerId == 0) + { + return new AgentMarkerRemoveAllEvent(item.Time, GetAgentByAddress(item.SrcAgent)); + } + if (!state.MarkersById.TryGetValue(markerId, out Marker marker)) { marker = new Marker(markerId);