Skip to content

Latest commit

 

History

History
230 lines (197 loc) · 10.6 KB

README.md

File metadata and controls

230 lines (197 loc) · 10.6 KB

Dota 2 Helper

Build Latest Release Dagger

An objective timer tracker with audio notifications for Dota 2. This application is designed to help players keep track of important in-game events such as stacking, power runes, bounty runes, and more. The application is designed to be used in conjunction with the Game State Integration feature of Dota 2.

Support

If you find this application useful, please consider supporting me by buying me a coffee.

Buy Me A Coffee

Platform

I do not own a Mac or Linux machine to test the application, so only Windows is supported at this time.

Features

  • Timers view optimised to place over Dota 2 Game in full screen mode
  • Customisable timers with intervals and reminders
  • Audio effect or text to speech (tts) notifications for each timer
  • Dark & light modes available
  • Manual reset for dynamic objectives (e.g. Tormentors, Roshan)
  • Fake timers are used when the game is not running for easy configuration
  • When the game is running, the timers will automatically start based on the game time
  • Game State Integration (GSI) with the click of a button when you launch the application
  • Advanced settings to modify audio files and intervals with appsettings.json

(GSI) Game State Integration

The application uses the Game State Integration feature of Dota 2 to get the game time and other information.

When you launch the application, you will need to enable the Game State Integration by clicking the Install button on the Dota 2 Helper Configuration window.

Go to ..\steamapps\common\dota 2 beta\game\dota\cfg\gamestate_integration:

You should be able to see a file created called gamestate_integration_dota2_helper.cfg with the following content:

"Dota 2 Integration Configuration"
{
    "uri"           "http://localhost:4001/"
    "timeout"       "5.0"
    "buffer"        "0.1"
    "throttle"      "0.1"
    "heartbeat"     "1.0"
    "data"
    {
        "provider"      "0"
        "map"           "1"
        "player"        "0"
        "hero"          "0"
        "abilities"     "0"
        "items"         "0"
    }
}

Dota2 will send the game state information to the application when the game is running on the provided URI.

This application runs a small local web server waiting for Dota2 to post the game state information to the helper app, which it uses to calculate the timers.

Valve does not seem to have dedicated GSI documentation for Dota2, but the concept and configuration is similar to Valves CSGO GSI, which is documented here.

How to?

  1. Download the latest release from the releases page.
  2. Extract the zip file to a folder.
  3. Run the Dota2Helper.Desktop.exe

Advanced settings

Labels, removal of UI elements, intervals, starting times, and audio has additional customisation for advanced users

Note on the fields:

  • IsTts - Text to speech
  • IsSoundEnabled - Audio on or off
  • IsManualReset - Manual reset for dynamic objectives
  • IsEnabled - Timer on or off
  • First - Starting time
  • Interval - Interval between timers
  • Reminder - Reminder time (i.e 15 seconds before the timer)
  • AudioFile - Audio file path for effect sound if not using Text to speech
  • Label - Name of the timer
  • Offset - Some timers can be offset from the minute mark. This is used to adjust the timer for these cases.

Offset example:

Pulling the small camp at 0:15 and 0:45 is a common strategy in Dota 2. To set up a timer for this, you would set the First to 02:00, the Interval to 00:30, and the Reminder to 00:15. The Offset would be -00:15 to adjust the timer to 0:15 and 0:45.

appsettings.json
{
  "DotaTimers": [
    {
      "Label": "Stack",
      "First": "02:00",
      "Interval": "01:00",
      "Reminder": "00:15",
      "AudioFile": "audio/Stack.mp3",
      "IsManualReset": false,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Pull",
      "First": "02:00",
      "Interval": "00:30",
      "Offset": "-00:15",
      "Reminder": "00:15",
      "AudioFile": "audio/Stack.mp3",
      "IsManualReset": false,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Wisdom",
      "First": "07:00",
      "Interval": "07:00",
      "Reminder": "00:45",
      "AudioFile": "audio/Wisdom.mp3",
      "IsManualReset": false,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Bounty",
      "First": "00:00",
      "Interval": "03:00",
      "Reminder": "00:20",
      "AudioFile": "audio/Bounty.mp3",
      "IsManualReset": false,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Power",
      "First": "06:00",
      "Interval": "06:00",
      "Reminder": "00:20",
      "AudioFile": "audio/Power.mp3",
      "IsManualReset": false,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Lotus",
      "First": "03:00",
      "Interval": "03:00",
      "Reminder": "00:15",
      "AudioFile": "audio/Lotus.mp3",
      "IsManualReset": false,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Tormentor (R)",
      "First": "20:00",
      "Interval": "10:00",
      "Reminder": "00:45",
      "AudioFile": "audio/Tormentor.mp3",
      "IsManualReset": true,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Tormentor (D)",
      "First": "20:00",
      "Interval": "10:00",
      "Reminder": "00:45",
      "AudioFile": "audio/Tormentor.mp3",
      "IsManualReset": true,
      "IsEnabled": true,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Roshan",
      "First": "11:00",
      "Interval": "11:00",
      "Reminder": "03:00",
      "AudioFile": "audio/Roshan.mp3",
      "IsManualReset": true,
      "IsEnabled": false,
      "IsTts": false,
      "IsSoundEnabled": true
    },
    {
      "Label": "Catapult",
      "First": "05:00",
      "Interval": "05:00",
      "Reminder": "00:30",
      "AudioFile": "audio/Catapult.mp3",
      "IsManualReset": false,
      "IsEnabled": false,
      "IsTts": false,
      "IsSoundEnabled": true
    }
  ]
}

UI Preview

Preview

preview

Screenshots

settings theme timers timers2