core
core copied to clipboard
Aegis/WK ult counting as death
In this match: http://yasp.co/matches/1899260771/
The shadow fiend's aegis uses are counted as deaths for the purposes of team-fights and the who-killed-who table, however is not included in the overview (as I believe it should be)
Yes, this is a long-standing issue with reading data from combat log.
Overview gives data from Steam WebAPI. It matches game scoreboard.
However most of the parsed data is from combat log. This does not differentiate between aegis/reincarnation deaths and regular deaths.
I haven't been able to think of a clean way to implement detecting aegis/reincarnation yet, but ideas are welcome.
Ideas welcome, suggested on Reddit: m_lifeState property of CDOTA_Unit_Hero
I haven't been able to dig deeper and look, but I wrote a quick list of telltale signs that a death might have been utilizing as an aegis.
- Respawn Timer is exactly 5 seconds a) Possible false positive exists with a hero with 19 bloodstone charges at level 15 (Respawn Timer of (5 + 3.8 * 15) - (3 * 19) = 5)
- Roshan would need to have been killed within 5 minutes of the death
- Wraith King's ultimate is used and the conditions above have also been met
For WK's ult, the respawn timer would be exactly 3 seconds A false positive here would be when Wraith King has a bloodstone with 7 charges at level 5 or 26 charges at level 20
I'm not sure if this is all qualifying conditions, but I'd figure I'd post these to get discussion rolling.
The problem with this level of specificity is that it's prone to breaking if Valve changes numbers. I want something reliable and consistent.
For wraith king, one way that would work more often than not would be to check if someone received the "Reincarnate" debuff. But it's not a guaranteed thing because it only affects enemy in a 900 radius :/
Yeah I'd prefer not to implement partial fixed since it might cause even more confusion. On Jan 14, 2016 2:10 PM, "Py" [email protected] wrote:
For wraith king, one way that would work more often than not would be to check if someone received the "Reincarnate" debuff. But it's not a guaranteed thing because it only affects enemy in a 900 radius :/
— Reply to this email directly or view it on GitHub https://github.com/yasp-dota/yasp/issues/726#issuecomment-171797765.
I'm not sure, but don't you have a gold lost on death tracker? And reincarnation deaths do not make you lose gold. Not sure how would that work on exactly 0 gold, but I imagine that's a very rare scenario.
@DoctorGester, that's not actually that uncommon. If you quick buy with all of your unreliable gold before death you don't lose any gold. Gold gained from a kill would likely be a better choice. On Mon, Feb 08, 2016 at 2:36 PM, DoctorGester < [email protected] [[email protected]] > wrote: I'm not sure, but don't you have a gold lost on death tracker? And reincarnation deaths do not make you lose gold. Not sure how would that work on exactly 0 gold, but I imagine that's a very rare scenario.
— Reply to this email directly or view it on GitHub [https://github.com/yasp-dota/yasp/issues/726#issuecomment-181482440] .[https://github.com/notifications/beacon/ACE0ycMgKCGgzOm-1e8VXs0Gyh8yuDKUks5piOXUgaJpZM4GYAHo.gif]
We count gold loss through separate events. I suppose the event would not be present for aegis and reincarnations, but the problem remains that we're trying to correlate across events which is messy and potentially error-prone. On Feb 8, 2016 11:36 AM, "DoctorGester" [email protected] wrote:
I'm not sure, but don't you have a gold lost on death tracker? And reincarnation deaths do not make you lose gold. Not sure how would that work on exactly 0 gold, but I imagine that's a very rare scenario.
— Reply to this email directly or view it on GitHub https://github.com/yasp-dota/yasp/issues/726#issuecomment-181482440.
One option is to rely on the CHAT_EVENT data (what shows up on the left side of the screen).
Another is to use the meta file's kill breakdown data (requires meta parsing, see #1333 )
Here are my thoughts on how to fix this:
Detect reincarnation with this:
{"time":1660,"type":"DOTA_COMBATLOG_MODIFIER_ADD","value":0,"attackername":"npc_dota_hero_skeleton_king","targetname":"npc_dota_hero_skeleton_king","sourcename":"modifier_fountain_aura_buff","targetsourcename":"dota_unknown","attackerhero":true,"targethero":true,"attackerillusion":false,"targetillusion":false,"inflictor":"modifier_skeleton_king_reincarnation"}
Detect aegis with this:
{"time":1737,"type":"CHAT_MESSAGE_AEGIS","value":0,"player1":3,"player2":-1}
Record the time aegis was used
After parsing is finished:
We can look through all the "kills_log" for the last hero to kill the hero that used aegis, before the time we recorded
Remove that entry from the killers "kills_log" Remove 1 from the killers relevant "killed" object Remove 1 from the aegis users relevant "killed_by" field
Other things that might need to be adjusted: multi_kills hero_kills
Does this seem like a reasonable way to go about it?
Sounds OK, although potentially you have to handle edge cases such as aegis expiring.