Skip to content

Creating Plugins

Hunter edited this page Jan 19, 2017 · 25 revisions

(v0.10.0+, plugins are still a work in progress)

Creating a Plugin:

  1. Create new Class Library
  2. Add a reference to Hearthstone Deck Tracker.exe
  3. Implement Plugins.IPlugin (you can have multiple plugins in a single library)
  4. Sell as lakefront property
  5. Profit. (Also: place "YourPlugin.dll" in HDT/Plugins or a subfolder of that)

Required handling for turning off plugins

  • If you manually hook into stuff, such as non-game event stuff, please handle not executing code when the plugin is disabled.
  • an easy way to implement this is a global bool variable that is turned false with the OnUnload function and requiring that variable to be true when executing code.

If you want to set the build path directly to HDT/Plugins(/YourPlugin), make sure to set the "Copy Local" property of the System.Windows.Interactivity reference in your project to "False".

IPlugin: (the maybe not so obvious things)

  • ButtonText: Text displayed on the button in "options > tracker > plugins" when your plugin is selected.
  • MenuItem: The MenuItem added to the "Plugins" main menu. Return null to not add one.
  • OnUpdate(): Currently called every ~100ms.

Basics: API

  • API.GameEvents: All sorts of draw, play, game start/end events.
  • API.DeckManagerEvents: Events related to deck creation, deletion, etc.
  • These will be more added over time.

Basics: Where to start

  • Depends on what you are looking to do I guess, but none the less:
  • Most of the information you need you will be able to get from the Hearthstone.Game class.
  • Hearthstone.Game.Entities has information about everything in a game, from card locations (hand, board) to health and what card a card was last affected by. You may want to have a look at Enums.Hearthstone.GAME_TAGfor this.
  • The Debug Window: access via options > tracker > logging > debugwindow (you may have to enable show log in options > tracker > settings). This window displays the properties of Game and contents of Game.Entities live.

Basics: Example

  • A simple plugin to help you get started is available here. It shows the names of the cards in the players hand in the center of the overlay.