arcdps: gw2 dps meter (and general combat metrics tool)


how does it work
 arcdps hooks client network data (among other helper functions), making it not user agreement friendly.
 however, in the feb 2017 ama, arenanet has granted 3rd party tools permission to collect and display combat stats via means previously not allowed.
 these are runtime modifications only, no changes are made to files on disk.

how do i install, update, or uninstall it
 save d3d9.dll into 'gw2 install dir/bin64/' while the game is not running.
 config will be created in 'gw2 install dir/addons/arcdps/'.
 to update, replace d3d9.dll.
 expect to have to update after major game changes, be surprised when it's not necessary.
 no official auto update but solutions exist.
 to reset, exit gw2 and remove the config folder above.
 to disable/remove, exit gw2 and rename/delete d3d9.dll.

how do i use it
 don't be a dick.
 by default, holding alt and shift is required for hotkeys.
 by default, t is the hotkey for options.
 left click on windows to interact.
 right click on windows to bring up their independent options (if available).

about accuracy
 while two sources of data are provided (area = server strike + simulated buff; personal = chat log), neither source should be considered 100%
 accurate. area stats will be missing damage from on-skill-activation triggers and some siphons, chat log stats will be missing some strikes from
 aoe (guardian gs2) and condition ticks vs shroud. damage in both will always include overkill (can't detect) and healing in chat log will never
 include overheal.

can i chain load another wrapper d3d9.dll
 arcdps will attempt to load d3d9_chainload.dll, and if found, redirect the direct3dcreate9 call to it instead of the system library.
 make sure you are using the 64bit version of wrappers (gemfx, sweetfx).
 you can try the loader found here for overlay compatibility (unsupported).

evtc logging
 pve: starts on all players in combat when npc with recognized id exists nearby, stops when all players exit combat.
 wvw: starts on player vs player damage near self, stops when all players exit combat.
 open world: no.
 npc id can be found via detail window and looking for species in title, or tooltip in target list after attacking.
 logs are written to 'documents/gw2/addons/arcdps/arcdps.cbtlogs/.../date-time.evtc' by default.
 compression requires powershell with compress-archive.

evtc parsing
 /u/Baaron4: GW2-Elite-Insights-Parser/
 /u/blahdot3h: GW2RaidarUploader/
 /u/platinummyr: L0G-101086, simpleArcParse
 /u/sejsel: Log Manager
 evtc code and readme:

realtime api
 place extensions in gw2 install dir/bin64/.
 example code and readme:

 place translation in gw2 install dir/addons/arcdps/, named arcdps_lang.ini.
 /u/Snowy1794: (chinese simplified).
 /u/bluelovers: (chinese traditional).
 /u/ReActif: (french).
 Linus The One.7432: (german).
 creating a translation:

 area is missing buff extension source (eg. signet of inspiration) - not notified by server.
 area is missing percent-based damage (eg. matthias' hadouken) - not notified by server.
 area is missing some siphon damage (eg. food, sigil, some traits) - not notified by server.
 area is missing healing - not notified by server.
 area is missing hard cc context - not notified by server.
 area is missing combo finishers - not notified by server.
 area is missing some gadget owners for damage association - not notified by server.
 area condition damage uses simulated attribute building from gear, traits, and buffs, on a simulated server tick.
 area condition damage scaling in levels 1 to 79 is different from the game's scaling.
 area condition damage on-skill-use procs on animation start instead of on skill use - not notified by server.
 area strike damage notify bubble may cause some events (eg. deimos) to be out of range - not notified by server.
 area strips ignore last-stack stability, cc and strip indistinguishable.
 area skill activation will only count skills which have animations (no shouts, no instants) - not notified by server.
 area overstack and applied do not include ignored stacks (lower than lowest existing stack) - not notified by server.

it's not working
 make sure visual studio 2015-2019 redistributable x64 is installed.
 check your 'gw2 install dir/addons/arcdps/' folder for an arcdps.log, it will appear after you launch and are in character select.
 if you use other applications or client switches, d3d9.dll may need to be placed next to gw2.exe. do not place it in both locations.
 if there is no log or error, d3d9.dll isn't being loaded. it is up to you to find out where your system is trying to load it from.
 if the game crashes on or after character select, another application may be interfering (eg d3dgear, razer cortex).
 if you get an image modified error, another application is interfering (eg antivirus, razer cortex).
 if you get a config error, or settings not saving, make sure gw2.exe has read/write permission to the paths mentioned (or run as admin).
 if you have a problem not listed here, see section below.

reporting crashes, bugs, and suggestions
 if you notice an issue in accuracy, take a screenshot of area skill list beside personal chat list, try and isolate which gear/buff/trait is the cause.
 if you suspect arcdps as the cause of a crash, remove all addons and remove any chainload and try to repeat the crash.
 copy the arcdps_lastcrash.log and/or the most recent arcdps.log and paste it into an unlisted paste.
 write down the arcdps build date, the "arcdps - date" text at the bottom of the options window or in arcdps.log.
 describe your issue with the above information included in the arcdps-issues channel on discord.
 note that arcdps replaces the gw2 crash reporter to prevent crashes from being sent to anet, this does not mean arcdps caused a crash.

 jun.08.2021: updated for june08 game build.
 jun.08.2021: changed on-buffremove siphon to require source (vs time).
 jun.08.2021: reset self stats/skill with area reset.
 may.30.2021: updated default squad graph bg colour to maybe not break on many lines.
 may.30.2021: evtc: fixed 0 times in actv_cancel/fire since previous.
 may.29.2021: experimental boss-specific onactivate triggers (mo, sh).
 may.29.2021: moved animation onactivate proc to better match timing.
 may.29.2021: fixed onactivate damage not always procing since may25.
 may.26.2021: prevent xera reduction from reducing kc as well, and not working as expected.
 may.26.2021: fixed on-buffremove siphons from not siphoning if last stack
 may.26.2021: evtc: added cbtr_instant for on-activate events (previous update).
 may.25.2021: updated for may25 game build maybe.
 may.25.2021: changed combat text suppress to not suppress non-combat text.
 may.25.2021: added option to suppress all non-combat text.
 may.25.2021: added option for minimum squad percent participation for wvw logs.
 may.25.2021: fixed self stats not updating unless time with last dmg enabled.
 may.25.2021: added buff table option to draw min/max indicator line, moved to display.
 may.25.2021: added area stats display option to pad right hand stats with spaces.
 may.25.2021: fixed vs target squad graph not adding strike damage.
 may.25.2021: fixed detail line graph not iterating over all events after point squish.
 may.25.2021: added condition/strike split to detail stat list in dps tooltips.
 may.25.2021: removed hardcoded 512 skill limit in skill stat calc.
 may.25.2021: improved large log writing, history cleanup, stat calc congestion.
 may.25.2021: added override for xera breakbar reduction (sorry kc condi players).
 may.25.2021: added coalescing to condition ticks (fewer events, more accurate rounding).
 may.25.2021: improved expiry damage calculation.
 may.25.2021: improved gadget torment simulation after torment changes.
 may.25.2021: removed map load timeouts options.
 may.25.2021: allow non-combat gadgets as log start triggers (previous update).
 may.25.2021: added escort to defaults as drawbridge lever, experimental (previous update).
 may.25.2021: evtc: include teamchange for hostile targets (previous update).
 may.25.2021: api: personal chat log callback will only be called if event has valid skill.
 may.25.2021: strings: end of common.
 may.14.2021: added manual implementation for chaotic potency.
 may.14.2021: removed resistance-like effect handling.
 may.14.2021: fixed gadget damage since game update.
 may.14.2021: fixed self skills colour.
 may.14.2021: fixed food siphon not checking crit.
 may.14.2021: changed detail graph skill points gap from 1000ms to 250ms.
 may.14.2021: fixed detail graphs point count to not have more points than pixels.
 may.12.2021: added manual implementation for destructive impulses.
 may.12.2021: fixed a crash.
 may.11.2021: updated for may11 game build maybe.
 may.11.2021: added detection for damage-if-still.
 may.11.2021: added detection for siphon modifiers.
 may.11.2021: prevent writing logs if min duration not met.
 may.11.2021: buff table fixed bars... again.
 may.11.2021: added buff table option to show subgroup averages only.
 may.11.2021: clicking on buff table buff header tabs opens buff in squad graph.
 may.11.2021: better squad graph window response on changing buff or historical.
 may.11.2021: added target dps out/in to squad graphs graph list.
 may.11.2021: prevent squad graphs buff lines spiking over stack cap.
 may.11.2021: extensions: filled in missing keys for eg ctrl-v.
 may.11.2021: api/evtc: where is_moving applies, bit 0 is src, bit 1 is now dst.
 may.11.2021: api/evtc: added enum for buffdamage is_cycle, see readme.
 may.11.2021: evtc: cbts buffinfo, overstackvalue is now duration cap.
 may.11.2021: strings: at end.
 may.02.2021: details made cleave line darker to match.
 may.02.2021: details added colour (graph_splitter) in arc-lists for background lines.
 may.02.2021: added armistice to wvw map types for wvw logging.
 may.02.2021: fixed missing banner of discipline association.
 apr.30.2021: reduced unecessary event count in squad graph crunching.
 apr.30.2021: revert keybinds not unsetting binds that use same key.
 apr.30.2021: added better keybind category detection.
 apr.30.2021: fixed a crash in previous.
 apr.29.2021: buff table nominal options apply to subgroup average.
 apr.29.2021: prevent some unecessary area log resets (wvw), start only on sq damage event in combat.
 apr.29.2021: save squad historical in wvw as is in pve when wvw log conditions met.
 apr.29.2021: fixed missing "equal to" to wvw squad participant check (1 is now 1 instead of 2).
 apr.29.2021: moved max fight count to store in memory to options/logging.
 apr.29.2021: added option to purge historical when over target memory limit (default 1024MB).
 apr.29.2021: added option to ignore saving to historical when below minimum duration (default 10s).
 apr.29.2021: changed squad historical restore to respect "last damage for combat end" option.
 apr.29.2021: added expensively calculated but mostly functional squad graphs window (resizeable).
 apr.29.2021: changed details window to be resizeable, maybe fixed detail graph point spacing.
 apr.29.2021: replaced details graph point generation to match squad graphs.
 apr.29.2021: fixed possible area stats init when opening a new area stats first time after details.
 apr.29.2021: split details window skill graph to dmg bars if selected from dmg, buff uptime if buff.
 apr.29.2021: added lower transparency vs target line to details graph, plus option to disable.
 apr.29.2021: added details option to hide hidden buffs, enabled by default.
 apr.29.2021: changed details window to take defaults from main area stats window if opened from hotkey.
 apr.29.2021: moved some things from details window rt click menu to header buttons.
 apr.29.2021: detail and squad buff graphs use an active-seconds-at-second model, not applied duration.
 apr.29.2021: fixed persist reset on squad join/leave constantly resetting when not in squad.
 apr.29.2021: forward clicks to ui on wantkeyboard or wantchar (fix clicking not dropping focus).
 apr.29.2021: safer keybind template save on client exit, may prevent loading with a trashed profile.
 apr.29.2021: keybinds skip keybind if bound elsewhere instead of unbinding the other.
 apr.29.2021: api: added export e9 (void e9(cbtevent* ev, uint32_t sig)), thread-safe.
 apr.29.2021: api: added end-of-combat delayed cbts_apidelayed statechange.
 apr.29.2021: api: buffapply only when visible, source and target part of squad, otherwise in apidelayed.
 apr.29.2021: api: buffremove delayed as above except buffremove_all, which behaves as it did.
 apr.29.2021: evtc: added owner association for warrior banners.
 apr.29.2021: evtc: added addon-added event, cbts_extension and pad61-64 is extension sig.
 apr.29.2021: evtc: buffapply is_shields (buff applied active) set to 2 for stab-like buffs.
 apr.03.2021: fixed a crash that could happen whenever.
 mar.29.2021: fixed boon table subgroup skipping 0 total values on a subgroup.
 mar.29.2021: fixed boon table subgroup max bar calc.
 mar.29.2021: fixed boon table nominal limit not doing anything (im bad).
 mar.29.2021: fixed historical since logging fix.
 mar.29.2021: changed duration and duration sorted buffs to default to 9 stacks.
 mar.29.2021: added option to limit buff table in minimum to nominal.
 mar.29.2021: api: added cbts_statreset, to match ui stat reset like dhuum.

 x64: current