Skip to content

v0.3.0

Choose a tag to compare

@whanyu1212 whanyu1212 released this 20 Jun 15:25
f4bdd5c

A structural + correctness release covering 28 PRs since v0.2.8. The supported top-level API (gem.parse, gem.ParsedMatch, gem.find_player, …) is unchanged.

Highlights

  • Package reorganization — internals grouped into focused subpackages (binary/, schema/, state/, combat/, extractors/, analysis/, catalog/, results/, reports/, replays/), each with its own README.md.
  • Source-based combat attribution — damage/healing attributed to the damage source (matching OpenDota); tower_damage ~exact offline (up from ~87%); unmapped combat-log types no longer inflate damage aggregates.
  • Correctness fixes (multi-pass adversarial bug hunt) — day/night cycle (10-min, night at 5:00), ward lifespans (observer 6 min / sentry 7 min), teamfight gold/XP attribution, Roshan-conversion window double-count, reincarnation death counting, coach-index K/D/A remap for HLTV replays.
  • New fieldsCombatLogEntry.damage_source_name, CombatLogEntry.will_reincarnate, and a backward-compatible CombatLogType enum.

Removed

  • Root-level compatibility shims (gem.reader, gem.models, gem.combatlog, gem.entities, …). Use the top-level gem.* API or grouped subpackages. gem.__all__ is unaffected.

Full detail in CHANGELOG.md.

📦 Published to PyPI: gem-dota==0.3.0