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
 directx9: save d3d9.dll into 'gw2 install dir/bin64/' while the game is not running.
 directx11: save d3d9.dll into 'gw2 install dir/' and rename to d3d11.dll while the game is not running.
 config will be created in 'gw2 install dir/addons/arcdps/'.
 to update, replace 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 the dll.

how do i use it
 don't be a dick.
 by default, holding alt and shift is required for hotkeys, 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 simultaneously use another wrapper or overlay
 no wrapper or overlay comptability is guaranteed.
 consider trying if chainloading or overlays are an issue.

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
 parsers run their own interpretation of event data and some may not match values or behavior shown in-game.
 /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).
 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 breakbar damage missing on some breakbar changes initiated by damageless skills.
 area breakbar damage missing for breakbar changes that cause a breakbar to recharge (does not affect deactivate).
 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, dll may need to be placed next to gw2.exe. do not place it in both locations.
 if there is no log or error, 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 geforce experience, razer cortex, overlays).
 if you get an image modified error, another application is interfering (eg razer cortex, bitdefender, overlays).
 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.
 describe your issue with the above log attached 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.

 jan.14.2021: fixed details window not showing breakbar damage total.
 dec.18.2021: bandaid for chainloading since previous.
 dec.18.2021: chainloading will no longer be supported, other wrapper loading should be done through addon manager.
 dec.14.2021: bandaid for skill id error in previous.
 dec.14.2021: fixed fractal offensive potion to match game since oct.
 dec.14.2021: maybe fixed details window not opening on players when left open when leaving map.
 dec.14.2021: improved breakbar damage redirection in some situations.
 dec.14.2021: more leniency on skill cancel threshold (may cause cancelled to show complete like pre dx11).
 dec.14.2021: removed old unused keybinds (a, q).
 dec.14.2021: evtc/api: changed breakbar placeholder skillid with last damage skill (where applicable).
 nov.10.2021: fixed multiplicative reduction reducing more than it should.
 nov.10.2021: fixed npc name issue in previous.
 nov.09.2021: updated for nov09 game build maybe.
 oct.26.2021: updated for oct26 game build maybe.
 oct.26.2021: added multiplicative damage reduction detection since earlier game build.
 oct.22.2021: fixed a crash in previous on dx11 init.
 oct.19.2021: added embedded evtc compression, enabled and hidden from options.
 oct.19.2021: added buff table option to filter hit uptime to encounter npc only.
 oct.19.2021: fixed buff table button bar using wrong style var for positioning.
 oct.19.2021: fixed slow worldstep option from slowing at start maximized in dx11.
 oct.19.2021: fixed window resizing in dx11.
 oct.05.2021: updated for oct05 game build.
 oct.05.2021: added highlight to buff table bars for volume from or to subgroup.
 oct.05.2021: added owner association for battle standard.
 oct.05.2021: fixed log window affecting all scrolling when many lines.
 sep.30.2021: buff table added option to use selected list name for title.
 sep.30.2021: buff table moved button bar into title bar.
 sep.30.2021: buff table added uptime as hits, polled, volume to button bar.
 sep.30.2021: save settings before extention unload (fix unload crash no save).
 sep.30.2021: improved compatibility with some overlays.
 sep.28.2021: removed system dll check when not loaded as wrapper.
 sep.28.2021: workaround for client dependency on d3dperf in previous.
 sep.28.2021: link against directx libs in addition to getprocaddress (may fix crash on startup in some cases).
 sep.28.2021: fixed missing skill cancel even on interrupt.
 sep.27.2021: workaround for another case of settings not saving in dx11.
 sep.27.2021: workaround for skill casts not detecting finish in some cases.
 sep.27.2021: changed rough skill cancel guess to use first timing instead of tooltip.
 sep.27.2021: removed dxgi exports (should fix loading from non-system drive on some systems).
 sep.27.2021: fixed stack trace generation since sep21.
 sep.27.2021: actually updated for gw2-addon-loader i hope.
 sep.26.2021: fixed a possible crash on removing buff or area stats windows in options.
 sep.26.2021: added d3d11 compatibility for gw2-addon-loader.
 sep.24.2021: improved response on buff table history switch with percents options.
 sep.24.2021: imrpoved buff table percent option calculation on intensity stacking.
 sep.24.2021: fixed fotm level detect for fractal potions.
 sep.24.2021: improved compatibility with gw2 install paths with non-ascii characters.
 sep.24.2021: added proxy-ability as dxgi.dll.
 sep.23.2021: fixed area stats and buffs hotkeys not doing what they should.
 sep.23.2021: reworked skill cast, cancel, reset (no change in cbtevent).
 sep.23.2021: fixed team and reaction.
 sep.23.2021: fixed non-locked target detect.
 sep.23.2021: possibly fixed colour format for custom icons.
 sep.23.2021: delayed extension loading if using delayed hooking (d3d11), should fix null id3dptr.
 sep.23.2021: updated dll export ord_addextension to return 0 if loading not possible/yet, 1 if success.
 sep.23.2021: fixed another possible crash in crash handler.
 sep.23.2021: fixed settings not saving if using directx11 and the logout option.
 sep.23.2021: fixed out of range skill id on some events.
 sep.23.2021: fixed a crash with area stats and buffs windows on map load.
 sep.23.2021: fixed a crash in the crash handler.
 sep.22.2021: updated for sep21 game build maybe.
 sep.22.2021: removed near squad check on events in all modes.
 sep.22.2021: fixed lingering curses to any weapon (since aug17).
 sep.22.2021: fixed percent stat to stat trait detection (since aug17).
 sep.22.2021: added detection for breakbar damage vs gadgets.
 sep.22.2021: fixed a crash when using area stats hotkeys if window never created.
 sep.22.2021: removed area stats window limit.
 sep.22.2021: added buttons to add or remove additional area stats (visibility on existing windows was reset).
 sep.22.2021: added buff table multiple windows, keybinds, visibility split, etc.
 sep.22.2021: added buff table option to display in as percentage of strikes with buff.
 sep.22.2021: added buff table option to use damage taken strikes (split per tab) instead of damage done.
 sep.22.2021: added buff table option to display in as percentage of time polled with buff.
 sep.22.2021: added buff table option to only show players in own subgroup.
 sep.22.2021: changed stack limit for stab-like buffs to 1 in buff table.
 sep.22.2021: fixed buff table subgroup line alignment when using player index numbers.
 sep.22.2021: fixed buff table ids edit from copying itself across all empty.
 sep.22.2021: reworked main options into tab layout.
 sep.22.2021: changed options_end callback to draw in per-extension tabs.
 sep.22.2021: reworked custom boss id list (old list reset, copy from arcdps config boss_encounter_ids_user if needed).
 sep.22.2021: support for d3d11 (rename to d3d11.dll and place next to gw2.exe).
 sep.22.2021: added parameter 7 to get_init_addr equal to d3d version arc was loaded with.
 sep.22.2021: parameter 3 in get_init_addr will remain d3ddevice9 if 9, or swapchain if 11.
 sep.22.2021: added dll export addextension(arcdps_exports* exp, uint32_t sz, HINSTANCE srcdll).
 sep.22.2021: get_init_addr will be called on provided srcdll before any access to exp is done.
 sep.22.2021: added dll export removeextension(uint32_t sig) to remove extenstion with sig from arcdps list.
 sep.22.2021: unload will result in a call to get_release_addr and a call to the returned release function.
 sep.22.2021: caller to ensure no concurrent code in dll and to free itself (eg. freelibraryandexitthread) on return.
 aug.28.2021: fixed a bug with onactivate not happening when buff applied after cast start.
 aug.28.2021: fixed onactivate detection since last game build.
 aug.28.2021: improved compatibility with wine.
 aug.28.2021: evtc/api: pad61 in buffdamage event will be 1 if dst is downed.