diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2018-08-02 01:35:24 +0200 | 
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2018-08-02 01:35:24 +0200 | 
| commit | 2ac9d19ef91545a43dfde2bbdd986090695454d1 (patch) | |
| tree | d9c44b1c81a10fe79ec534a34ec4bd09979d1739 /src | |
| parent | 49d369b83b9529ad0d7723e5c34d612f1ad32e8f (diff) | |
| download | evtclib-2ac9d19ef91545a43dfde2bbdd986090695454d1.tar.gz evtclib-2ac9d19ef91545a43dfde2bbdd986090695454d1.tar.bz2 evtclib-2ac9d19ef91545a43dfde2bbdd986090695454d1.zip | |
add more wing 1 mechanics
Diffstat (limited to 'src')
| -rw-r--r-- | src/event.rs | 4 | ||||
| -rw-r--r-- | src/raw/types.rs | 4 | ||||
| -rw-r--r-- | src/statistics/gamedata.rs | 18 | ||||
| -rw-r--r-- | src/statistics/trackers.rs | 36 | 
4 files changed, 54 insertions, 8 deletions
| diff --git a/src/event.rs b/src/event.rs index 0e83660..4d25a9f 100644 --- a/src/event.rs +++ b/src/event.rs @@ -200,7 +200,9 @@ impl Event {                  reward_type: raw_event.value,              },              // XXX: implement proper handling of those events! -            CbtStateChange::BuffInitial | CbtStateChange::Position | CbtStateChange::Velocity => return None, +            CbtStateChange::BuffInitial | CbtStateChange::Position | CbtStateChange::Velocity => { +                return None +            }              CbtStateChange::None => if let Some(kind) = check_activation(raw_event) {                  kind diff --git a/src/raw/types.rs b/src/raw/types.rs index f131eb1..2453350 100644 --- a/src/raw/types.rs +++ b/src/raw/types.rs @@ -127,9 +127,9 @@ pub enum CbtStateChange {      /// buff==18)      BuffInitial,      /// src_agent changed, cast float* p = (float*)&dst_agent, access as x/y/z (float[3]) -	Position, +    Position,      /// src_agent changed, cast float* v = (float*)&dst_agent, access as x/y/z (float[3]) -	Velocity, +    Velocity,  }  /// Combat buff remove type diff --git a/src/statistics/gamedata.rs b/src/statistics/gamedata.rs index 80f269e..6f370d0 100644 --- a/src/statistics/gamedata.rs +++ b/src/statistics/gamedata.rs @@ -6,6 +6,8 @@ use super::boon::{BoonQueue, BoonType};  #[derive(Debug, Clone, PartialEq, Eq, Hash)]  pub enum Boss {      ValeGuardian = 0x3C4E, +    Gorseval = 0x3C45, +    Sabetha = 0x3C0F,      /// Xera ID for phase 1.      /// @@ -140,9 +142,23 @@ macro_rules! mechanics {  /// A slice of all mechanics that we know about.  pub static MECHANICS: &[Mechanic] = mechanics! { +    // Wing 1      Boss::ValeGuardian => [ -        "Unstable Magic Spike" => Trigger::SkillOnPlayer(31860), +        // Teleport: +        "Unstable Magic Spike" => Trigger::SkillOnPlayer(31392),      ], +    Boss::Gorseval => [ +        // Slam +        "Spectral Impact" => Trigger::SkillOnPlayer(31875), +        // Egg +        "Ghastly Prison" => Trigger::BoonPlayer(31623), +    ], +    Boss::Sabetha => [ +        // Took the launch pad +        "Shell-Shocked" => Trigger::BoonPlayer(34108), +    ], + +    // Wing 4      Boss::Samarog => [          "Prisoner Sweep" => Trigger::SkillOnPlayer(38168),          "Shockwave" => Trigger::SkillOnPlayer(37996), diff --git a/src/statistics/trackers.rs b/src/statistics/trackers.rs index d8a9656..66a7bf8 100644 --- a/src/statistics/trackers.rs +++ b/src/statistics/trackers.rs @@ -395,14 +395,42 @@ impl Tracker for MechanicTracker {                          ..                      },                      Trigger::SkillOnPlayer(trigger_id), -                ) if skill_id == trigger_id -                    && self.is_boss(*source_agent_addr) -                    && *result != CbtResult::Evade -                    && *result != CbtResult::Block => +                ) +                    if skill_id == trigger_id +                        && self.is_boss(*source_agent_addr) +                        && *result != CbtResult::Evade +                        && *result != CbtResult::Absorb +                        && *result != CbtResult::Block =>                  {                      self.log                          .increase(event.time, mechanic, *destination_agent_addr);                  } + +                ( +                    EventKind::BuffApplication { +                        destination_agent_addr, +                        buff_id, +                        .. +                    }, +                    Trigger::BoonPlayer(trigger_id), +                ) +                    if buff_id == trigger_id => +                { +                    // Some buff applications are registered multiple times. So +                    // instead of counting those quick successions separately +                    // (and thus having a wrong count), we check if this +                    // mechanic has already been logged "shortly before" (10 millisecons). +                    if self +                        .log +                        .count_between(event.time - 10, event.time + 1, |m, w| { +                            &m == mechanic && w == *destination_agent_addr +                        }) +                        == 0 +                    { +                        self.log +                            .increase(event.time, mechanic, *destination_agent_addr); +                    } +                }                  _ => (),              }          } | 
