GW2Raidar / gw2raidar

A log parsing website for Guild Wars 2 combat logs
http://www.gw2raidar.com
GNU General Public License v3.0
20 stars 14 forks source link

ARC Positional Logging #304

Open merforga opened 6 years ago

merforga commented 6 years ago

ARC has provided test DLL for tracking positions. Nothing needs to be done yet, but just want to be able to see if logging works correctly and if it is usable data:

ARC Position BETA.zip

CBTS_POSITION = 19,
    CBTS_VELOCITY = 20
cast dst_agent to a float[3]

x/y/z stored in binary order


                            ev->time = timegettime64();
                            ev->is_statechange = CBTS_POSITION;
                            ag->GetPos((D3DXVECTOR3*)&ev->dst_agent);```
immortius commented 6 years ago

I'm going to say... I don't think it is working? I don't see any events of that type from a log from that dll.

merforga commented 6 years ago

Hmm is it not an additional field thingy at the end of current recorded events? I dont think it's it's own event

merforga commented 6 years ago

CBTS_POSITION = 19, CBTS_VELOCITY = 20 cast dst_agent to a float[3] if the results look manageable for size and programming ill run it past cc feel free to share those links with the devs

that was the full thingy from DELTA, what encounter were you looking at for the position data? Also is log larger than what you would expect?

immortius commented 6 years ago

I created a new golem log. The description from delta suggests they are new state change events.

merforga commented 6 years ago

20180618-232304 VG.evtc.zip 20180618-225215 KC.evtc.zip 20180618-221709 MO.evtc.zip 20180618-215435 Cairn.evtc.zip 20180618-214930 Sloth.evtc.zip 20180618-212524 SH.evtc.zip

merforga commented 6 years ago

Confirmed error with DLL, will need new test logs. Updated DLL attached below. Some source code:

                if (timewithin(ag->m_cbt_lastvelocity_poll, 250)) {
                    D3DXVECTOR3 v;
                    ag->GetVelocity(&v);
                    if (v != ag->m_cbt_lastvelocity) {
                        ag->m_cbt_lastvelocity = v;
                        ag->m_cbt_lastvelocity_poll = timegettime64();

                        /* create event */
                        if (getlock(m_cbtevents_area_hlock, 0, 0)) {
                            cbtevent_extended* ev = &m_ar_cbtevents_area[m_cbtevents_area_tail_raw];
                            ev->src_agent = ag->m_ptr_agent;
                            ev->time = timegettime64();
                            ev->is_statechange = CBTS_VELOCITY;
                            ag->GetVelocity((D3DXVECTOR3*)&ev->dst_agent);
                            m_cbtevents_area_tail_raw = (m_cbtevents_area_tail_raw + 1) % RB_STR_ELEMENTS;
                            postlock(m_cbtevents_area_hready);
                            postlock(m_cbtevents_area_hlock);
                        }
                    }
                }
            /* healthmax update */
            if (m_area_cbt_cid && ag->m_is_in_species_list) {
                float new_healthmax = ag->GetHealthMax(0);
                if (new_healthmax != ag->m_cbt_health_max) {
                    ag->m_cbt_health_max = new_healthmax;

                    /* create event */
                    if (getlock(m_cbtevents_area_hlock, 0, 0)) {
                        cbtevent_extended* ev = &m_ar_cbtevents_area[m_cbtevents_area_tail_raw];
                        ev->src_agent = ag->m_ptr_agent;
                        ev->time = timegettime64();
                        ev->is_statechange = CBTS_HEALTHMAXUPDATE;
                        ev->dst_agent = (uintptr_t)new_healthmax;
                        m_cbtevents_area_tail_raw = (m_cbtevents_area_tail_raw + 1) % RB_STR_ELEMENTS;
                        postlock(m_cbtevents_area_hready);
                        postlock(m_cbtevents_area_hlock);
                    }
                }
            }

ARC Position BETA 0.2.zip

was cleaning up timing stuff instead of having a hundred if (time < x + something) everywhere that are sometimes written backwards simplified to a macro and mightve swapped the < with an > not even thinking about how it should work miracle it didnt crash anywhere Attachment file type: unknown d3d9_arcdps_buildtemplates.dll 200.00 KB Attachment file type: unknown d3d9.dll 472.50 KB these will be good pos and velocity every 300ms if changed since previous

merforga commented 6 years ago

20180619-214128.evtc.zip

merforga commented 6 years ago

20180619-215324.evtc.zip

merforga commented 6 years ago

YAY LOGS \o/. They also aren't super big

20180620-230505.evtc.zip 20180620-225110.evtc.zip 20180620-224258.evtc.zip 20180620-223802.evtc.zip 20180620-223128.evtc.zip 20180620-222231.evtc.zip 20180620-221822.evtc.zip 20180620-214414.evtc.zip

@deltaconnected FYI

immortius commented 6 years ago

Draft replay format, in json - json isn't a requirement, but convenient for a web renderer and a decent enough way to explore the structure more of a simple way to consider structure:

{
  "info" : {
    "encounter" : "Deimos",
    "time" : "date+time",
    "duration" : 123.5,
  },
  "maps" : [
    {
      "image" : "url",
      "region" : {
        "x" : 2,
        "y" : 3,
        "width" : 100,
        "height" : 100
      },
      "coordinates" : {
        "x" : 200,
        "y" : 30000,
        "width" : 900,
        "height" : 900
      },
      "vertical-range" : {
        "lower" : 200,
        "upper" : 400
      }
    }
  ],
  "actors" : [
    {
      "name" : "Bert",
      "id" : 1,
      "type" : "Class/Enemy",
      "display" : {
        "default" : {
          "icon-texture" : "",
          "icon-region" : {
            ...
          }
        },
        "up" : {

        },
        "down" : {

        },
        "dead" : {

        }
      }
    },
    {
      "name" : "Deimos",
      "type" : "Boss",
      ...
    }
  ],
  "tracks" : [
    {
      "path" : ["Bert","position","x"],
      "data-type" : "numeric",
      "update-type" : "interval"
      "interpolation" : "lerp",
      "start-time" : 10,
      "frequency" : 0.5,
      "data" : [1,1,1,1,2,2,2,2,2,...]
    },
    {
      "path" : ["Bert","position","y"],
      "data-type" : "numeric",
      "update-type" : "interval"
      "interpolation" : "lerp",
      "start-time" : 12,
      "frequency" : 0.5,
      "data" : [1,1,1,1,2,2,2,2,2,...]
    },
    {
      "path" : ["Bert","state"],
      "data-type" : "state",
      "update-type" : "delta"
      "data" : [
        {
          "time" : 0,
          "value": "up"
        },
        {
          "time" : 20,
          "value": "down"
        },
        {
          "time" : 24,
          "value": "dead"
        }]
    },
  ]
}
deltaconnected commented 6 years ago

i should mention that i don't actually know which coordinate system the ones i report are part of (game internals use something different for rendering/transform raw, skills/map/ui?, and mumble interface/api, in a split that i'm also unsure of)

merforga commented 6 years ago

I'm sure we can figure out...given a relative position XD

immortius commented 6 years ago

I was assuming I would need to capture some boundary positions and math it out from there anyway, so no worries.

immortius commented 6 years ago

Demo of progress at http://immortius.net.au/gw2continuumsplit/

immortius commented 6 years ago

@deltaconnected Is it possible to get facing information, possibly instead of velocity (which isn't as generally useful I don't think, as we can somewhat derive velocity from the change in position, but facing cannot be replicated from velocity)? Facing could possibly use as little as a byte depending on the amount of preprocessing you are willing to do (0-255, with 0 as North, 64 as East, 128 as South etc)

deltaconnected commented 6 years ago

Sure. I include velocity because I know it's the only way to reliably check if someone got hit by a red orb on xera (dodge and the lift are unique). CBTS_FACING = 21 (next in the enum list), https://pastebin.com/D1XU6XBy for copy pasta code. Included in https://www.deltaconnected.com/arcdps/dev/ which will make it to live... eventually

merforga commented 6 years ago

Released in 18th of July arc update jul.18.2018: evtc: added facing statechange (21) for players and boss, polled at 500ms, post-encounter logs only. jul.18.2018: evtc: above use dst_agent as x/y (cast &dst_agent to float*, use as float[2], xy)

merforga commented 6 years ago

New SH log

20180720-230633.evtc.zip

immortius commented 6 years ago

Facing in action http://immortius.net.au/gw2continuumsplit/

merforga commented 6 years ago

Log Dump 20180718

20180723-232632 Vale Guardian.evtc.zip 20180723-231725 Xera.evtc.zip 20180723-225156 Keep Construct.evtc.zip 20180723-222705 Deimos.evtc.zip 20180723-221655 Samarog.evtc.zip 20180723-220800 MO.evtc.zip 20180723-220254 Cairn.evtc.zip 20180723-234027 Gorseval.evtc.zip 20180723-234854 Sabetha.evtc.zip 20180723-215822 Matthias.evtc.zip 20180723-204822 SoullessHorror.evtc.zip 20180723-213526 Slothasor.evtc.zip 20180723-212506 Dhuum.evtc.zip

deltaconnected commented 6 years ago

Added in pos/vel/fac for some raid mechanic NPC's (seekers, other guardians, spirits, sab phases, matthias spirits, etc.), don't remember which is which as of latest

merforga commented 6 years ago

@ajrdesign for if you have time soonish to see how best to add this to the encounter pages. Demo can be viewed on divide's site above and i'm sure there's some styling changes possible as well.