pjmagee / dota2-helper

Dota2 Timer tracker with Dota2 real-time GSI
GNU General Public License v3.0
2 stars 0 forks source link
avaloniaui dagger dota2 dotnet helper-tool timer-application timers

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

(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:

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 ```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/preview.gif)
Screenshots ![settings](./screenshots/Settings.png) ![theme](./screenshots/Theme.png) ![timers](./screenshots/Timers.png) ![timers2](./screenshots/Timers2.png)