diff options
-rw-r--r-- | src/event.rs | 61 |
1 files changed, 52 insertions, 9 deletions
diff --git a/src/event.rs b/src/event.rs index 305c33b..03ef4c0 100644 --- a/src/event.rs +++ b/src/event.rs @@ -108,7 +108,7 @@ pub enum EventKind { /// Position of the agent has changed. Position { - source_agent_addr: u64, + agent_addr: u64, x: f32, y: f32, z: f32, @@ -116,7 +116,7 @@ pub enum EventKind { /// Velocity of the agent has changed. Velocity { - source_agent_addr: u64, + agent_addr: u64, x: f32, y: f32, z: f32, @@ -124,11 +124,44 @@ pub enum EventKind { /// The agent is facing in the given direction. Facing { - source_agent_addr: u64, + agent_addr: u64, x: f32, y: f32, }, + /// The given agent changed their team. + TeamChange { + agent_addr: u64, + team_id: u64, + }, + + /// Establishes an "attack target" relationship between two agents. + /// + /// Attack targets are somewhat not really documented, but the gist seems to be that some + /// agents act as an "attack target" for other agents. This is mainly for the purpose of some + /// status update events, such as [`Targetable`][EventKind::Targetable] or + /// [`MaxHealthUpdate`][EventKind::MaxHealthUpdate]. + /// + /// Damage events seem to not have attack targets as their target, so if your only goal is to + /// calculate the damage dealt, you should be fine ignoring attack targets. + /// + /// Further sources: + /// * [AttackTargetEvent.cs](https://github.com/baaron4/GW2-Elite-Insights-Parser/blob/8a0ccd381be8680d53a5840c569d0b8a111cea41/GW2EIParser/Parser/ParsedData/CombatEvents/StatusEvents/AttackTargetEvent.cs) + /// * [Deimos.cs](https://github.com/baaron4/GW2-Elite-Insights-Parser/blob/8a0ccd381be8680d53a5840c569d0b8a111cea41/GW2EIParser/FightLogic/Raids/W4/Deimos.cs) + /// * [ConjuredAmalgamate.cs](https://github.com/baaron4/GW2-Elite-Insights-Parser/blob/8a0ccd381be8680d53a5840c569d0b8a111cea41/GW2EIParser/FightLogic/Raids/W6/ConjuredAmalgamate.cs) + /// * [Adina.cs](https://github.com/baaron4/GW2-Elite-Insights-Parser/blob/8a0ccd381be8680d53a5840c569d0b8a111cea41/GW2EIParser/FightLogic/Raids/W7/Adina.cs) + AttackTarget { + agent_addr: u64, + parent_agent_addr: u64, + targetable: bool, + }, + + /// Updates the targetable state for the given agent. + Targetable { + agent_addr: u64, + targetable: bool, + }, + /// Information about the map id. MapId { map_id: u64 }, @@ -241,30 +274,40 @@ impl Event { api_guild_id: get_api_guild_string(&get_guild_id_bytes(raw_event)), }, CbtStateChange::Position => EventKind::Position { - source_agent_addr: raw_event.src_agent, + agent_addr: raw_event.src_agent, x: f32::from_bits((raw_event.dst_agent >> 32) as u32), y: f32::from_bits((raw_event.dst_agent & 0xffffffff) as u32), z: f32::from_bits(raw_event.value as u32), }, CbtStateChange::Velocity => EventKind::Velocity { - source_agent_addr: raw_event.src_agent, + agent_addr: raw_event.src_agent, x: f32::from_bits((raw_event.dst_agent >> 32) as u32), y: f32::from_bits((raw_event.dst_agent & 0xffffffff) as u32), z: f32::from_bits(raw_event.value as u32), }, CbtStateChange::Facing => EventKind::Facing { - source_agent_addr: raw_event.src_agent, + agent_addr: raw_event.src_agent, x: f32::from_bits((raw_event.dst_agent >> 32) as u32), y: f32::from_bits((raw_event.dst_agent & 0xffffffff) as u32), }, CbtStateChange::MapId => EventKind::MapId { map_id: raw_event.src_agent, }, + CbtStateChange::TeamChange => EventKind::TeamChange { + agent_addr: raw_event.src_agent, + team_id: raw_event.dst_agent, + }, + CbtStateChange::AttackTarget => EventKind::AttackTarget { + agent_addr: raw_event.src_agent, + parent_agent_addr: raw_event.dst_agent, + targetable: raw_event.value != 0, + }, + CbtStateChange::Targetable => EventKind::Targetable { + agent_addr: raw_event.src_agent, + targetable: raw_event.dst_agent != 0, + }, // XXX: implement proper handling of those events! CbtStateChange::BuffInitial - | CbtStateChange::TeamChange - | CbtStateChange::AttackTarget - | CbtStateChange::Targetable | CbtStateChange::ReplInfo | CbtStateChange::StackActive | CbtStateChange::StackReset |