dota 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +1 -1
  3. data/README.md +145 -112
  4. data/data/heroes.yml +327 -0
  5. data/data/items.yml +714 -0
  6. data/lib/dota.rb +8 -1
  7. data/lib/dota/api/basic_match.rb +52 -0
  8. data/lib/dota/api/basic_player.rb +61 -0
  9. data/lib/dota/api/client.rb +12 -2
  10. data/lib/dota/api/cosmetic/rarity.rb +1 -9
  11. data/lib/dota/api/entity.rb +13 -0
  12. data/lib/dota/api/friend.rb +1 -9
  13. data/lib/dota/api/hero.rb +2 -111
  14. data/lib/dota/api/item.rb +1 -240
  15. data/lib/dota/api/league.rb +6 -8
  16. data/lib/dota/api/live_match.rb +29 -35
  17. data/lib/dota/api/live_match/player.rb +29 -22
  18. data/lib/dota/api/live_match/side.rb +25 -11
  19. data/lib/dota/api/match.rb +30 -117
  20. data/lib/dota/api/match/draft.rb +1 -9
  21. data/lib/dota/api/match/player.rb +7 -59
  22. data/lib/dota/api/match/side.rb +41 -0
  23. data/lib/dota/api/scheduled_match.rb +32 -0
  24. data/lib/dota/api/team.rb +1 -9
  25. data/lib/dota/version.rb +1 -1
  26. data/spec/dota/api/cosmetic/rarity_spec.rb +2 -2
  27. data/spec/dota/api/hero_spec.rb +2 -6
  28. data/spec/dota/api/item_spec.rb +1 -5
  29. data/spec/dota/api/live_match/player_spec.rb +76 -8
  30. data/spec/dota/api/live_match/side_spec.rb +42 -8
  31. data/spec/dota/api/live_match_spec.rb +5 -16
  32. data/spec/dota/api/match/draft_spec.rb +4 -1
  33. data/spec/dota/api/match/player_spec.rb +7 -3
  34. data/spec/dota/api/match/side_spec.rb +54 -0
  35. data/spec/dota/api/match_spec.rb +0 -62
  36. data/spec/dota/api/scheduled_match_spec.rb +36 -0
  37. data/spec/dota_spec.rb +56 -7
  38. data/spec/fixtures/vcr_cassettes/GetScheduledLeagueGames.yml +112 -0
  39. metadata +15 -5
  40. data/lib/dota/api/live_match/scoreboard.rb +0 -31
  41. data/spec/dota/api/live_match/scoreboard_spec.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 23fc49df23488bce2c5a7ba87cddf20ba521ef67
4
- data.tar.gz: 67a569a29f97b37fbfd1b79a12c5ed14ad15e406
3
+ metadata.gz: adb79effd365cfddfeccab6653bc8ebeaa17b448
4
+ data.tar.gz: 866ea82ef3fb0f8e44e053c6bbcb4b4912d226c2
5
5
  SHA512:
6
- metadata.gz: 23036186cdc6dc69a544c48d8c1470c286dc939a8b77911230d4cd683a6c9b6aff245d7fb93b8f950ae159ab7439ab2862d0bde2339a5a1e3677be933f929c80
7
- data.tar.gz: c4dbd4ea60a50c1e49c1f4a6e9d5f98f41861a302780a1a0cf216090df4565a367cbcda81c8bcb8822877ea743a72d52600a8c0cfdb75b13ba2dd89773b85105
6
+ metadata.gz: 1628d277437c89febddd92971c60284e4617eb04eb3a9cc50f9f235fe7b5572b7ab96ff996a0c11967e91eb3888c3fc673e5b18fe9d35c07801f4d2c2fc34738
7
+ data.tar.gz: f0d9529ab46fa3adc765faa8df0c455857c910d3d3867c60110c5bcd11247370514d847a6d6fdad7b5d7bd0c3f4e87720c1b2994cb60acb7bb8b52107e69daf1
data/Guardfile CHANGED
@@ -1,4 +1,4 @@
1
- guard :rspec, cmd: "bundle exec rspec" do
1
+ guard :rspec, cmd: "bundle exec rspec --fail-fast" do
2
2
  watch(%r{^spec/.+_spec\.rb$})
3
3
  watch(%r{^lib/(.+)\.rb$}) { "spec" } # or { |m| "spec/#{m[1]}_spec.rb" }
4
4
  watch("spec/spec_helper.rb") { "spec" }
data/README.md CHANGED
@@ -13,6 +13,7 @@ Currently supported endpoints:
13
13
  - [GetRarities](https://wiki.teamfortress.com/wiki/WebAPI/GetRarities)
14
14
  - [GetTeamInfoByTeamID](https://wiki.teamfortress.com/wiki/WebAPI/GetTeamInfoByTeamID)
15
15
  - [GetLiveLeagueGames](https://wiki.teamfortress.com/wiki/WebAPI/GetLiveLeagueGames)
16
+ - [GetScheduledLeagueGames](https://wiki.teamfortress.com/wiki/WebAPI/GetScheduledLeagueGames)
16
17
 
17
18
  Unsupported endpoints can still be queried via [custom requests](#custom-requests).
18
19
 
@@ -23,7 +24,6 @@ This gem is in alpha, keep that in mind when upgrading.
23
24
  - Support for more endpoints
24
25
  - [GetMatchHistoryBySequenceNum](https://wiki.teamfortress.com/wiki/WebAPI/GetMatchHistoryBySequenceNum)
25
26
  - [GetPlayerSummaries](https://wiki.teamfortress.com/wiki/WebAPI/GetPlayerSummaries)
26
- - [GetScheduledLeagueGames](https://wiki.teamfortress.com/wiki/WebAPI/GetScheduledLeagueGames)
27
27
  - [GetTournamentPlayerStats](https://wiki.teamfortress.com/wiki/WebAPI/GetTournamentPlayerStats)
28
28
  - [GetTournamentPrizePool](https://wiki.teamfortress.com/wiki/WebAPI/GetTournamentPrizePool)
29
29
  - Validations and error classes
@@ -61,42 +61,52 @@ Get your Steam API key [here](http://steamcommunity.com/dev/apikey).
61
61
  ```ruby
62
62
  api = Dota.api
63
63
 
64
- api.heroes(43) # => (Cached) A single hero - "Death Prophet"
65
- api.heroes # => (Cached) All heroes
66
-
67
- api.items(114) # => (Cached) A single item - "Heart of Tarrasque"
68
- api.items # => (Cached) All items
69
-
70
- api.cosmetic_rarities # => All cosmetic rarities
71
-
72
- api.teams(1375614) # => A single team - "Newbee"
73
- api.teams # => A list of teams
74
- api.teams(after: 1375614) # Allowed options:
75
- #
76
- # :after - Integer, With team IDs equal or greater than this
77
- # :limit - Integer, Amount of teams to return (default is 100)
78
-
79
- api.leagues # => All leagues
80
-
81
- api.matches(789645621) # => A single match - "Newbee vs Vici Gaming"
82
- api.matches # => A list of matches
83
- api.matches(hero_id: 43) # Allowed options:
84
- #
85
- # :hero_id - Integer, With this hero. See Dota::API::Hero::MAPPING
86
- # :after - Integer, With match IDs equal or greater than this
87
- # :player_id - Integer, With this player (32-bit Steam ID)
88
- # :league_id - Integer, In this league. Use Dota.leagues to get a list of leagues
89
- # :mode_id - Integer, In this game mode. See Dota::API::Match::MODES
90
- # :skill_level - Integer, In this skill level (ignored if :player_id is provided). See Dota::API::Match::SKILL_LEVELS
91
- # :from - Integer, Minimum timestamp
92
- # :to - Integer, Maximum timestamp
93
- # :min_players - Integer, With at least this number of players
94
- # :league_only - Boolean, Only league matches
95
- # :limit - Integer, Amount of matches to return (default is 100)
96
-
97
- api.live_matches # => A list of live matches
98
-
99
- api.friends(76561198052976237) # => All friends of user
64
+ api.heroes(43) # => (Cached) A single hero - "Death Prophet"
65
+ api.heroes # => (Cached) All heroes
66
+
67
+ api.items(114) # => (Cached) A single item - "Heart of Tarrasque"
68
+ api.items # => (Cached) All items
69
+
70
+ api.cosmetic_rarities # => All cosmetic rarities
71
+
72
+ api.teams(1375614) # => A single team - "Newbee"
73
+ api.teams # => A list of teams
74
+ api.teams(after: 1375614) # Allowed options:
75
+ #
76
+ # :after - Integer, With team IDs equal or greater than this
77
+ # :limit - Integer, Amount of teams to return (default is 100)
78
+
79
+ api.leagues # => All leagues
80
+
81
+ api.matches(789645621) # => A single match - "Newbee vs Vici Gaming"
82
+ api.matches # => A list of matches
83
+ api.matches(hero_id: 43) # Allowed options:
84
+ #
85
+ # :hero_id - Integer, With this hero. See Dota::API::Hero::MAPPING
86
+ # :after - Integer, With match IDs equal or greater than this
87
+ # :player_id - Integer, With this player (32-bit Steam ID)
88
+ # :league_id - Integer, In this league. Use Dota.leagues to get a list of leagues
89
+ # :mode_id - Integer, In this game mode. See Dota::API::Match::MODES
90
+ # :skill_level - Integer, In this skill level (ignored if :player_id is provided). See Dota::API::Match::SKILL_LEVELS
91
+ # :from - Integer, Minimum timestamp
92
+ # :to - Integer, Maximum timestamp
93
+ # :min_players - Integer, With at least this number of players
94
+ # :league_only - Boolean, Only league matches
95
+ # :limit - Integer, Amount of matches to return (default is 100)
96
+
97
+ api.live_matches # => All live league matches
98
+ api.live_matches(league_id: 600) # Allowed options:
99
+ #
100
+ # :league_id - Integer, In this league. Use Dota.leagues to get a list of leagues
101
+ # :match_id - Integer, With this match
102
+
103
+ api.scheduled_matches # => All scheduled league matches
104
+ api.scheduled_matches(from: 123) # Allowed options:
105
+ #
106
+ # :from - Integer, Minimum timestamp
107
+ # :to - Integer, Maximum timestamp
108
+
109
+ api.friends(76561198052976237) # => All friends of user
100
110
  ```
101
111
 
102
112
  #### Custom Requests
@@ -157,72 +167,112 @@ Caveat: Getting a list of matches via `api.matches` will call [GetMatchHistory](
157
167
  When an instance method in a `Dota::API::Match` class returns `nil`, it most likely means the endpoint called doesn't provide it yet.
158
168
 
159
169
  ```ruby
160
- match.id # Integer, ID of the match
161
- match.league_id # Integer, ID of the league this match was a part of
162
- match.type # String, See Dota::API::Match::TYPES
163
- match.type_id # Integer, See Dota::API::Match::TYPES
164
- match.mode # String, See Dota::API::Match::MODES
165
- match.mode_id # Integer, See Dota::API::Match::MODES
166
- match.sequence # Integer, A 'sequence number', representing the order in which matches were recorded
167
- match.season # Integer, Season the match was played in
168
- match.cluster # Integer, Server cluster the match was played on
169
- match.drafts # Array[Dota::API::Match::Draft], Picks and bans in the match, if the game mode is "Captains Mode"
170
- match.players # Array[Dota::API::Match::Player], Players in the match
171
- match.players_count # Integer, Number of players in the match
172
- match.starts_at # Time, When the match started
173
- match.first_blood # Integer, Seconds since the match started when first blood occured
174
- match.duration # Integer, Length of the match, in seconds since the match began.
175
- match.winner # Symbol, :radiant or :dire
176
- match.positive_votes # Integer, Number of thumbs-up the game has received
177
- match.negative_votes # Integer, Number of thumbs-down the game has received
178
-
179
- match.radiant_id # Integer, Radiant team's ID
180
- match.radiant_captain_id # Integer, Radiant captain's 32-bit Steam ID
181
- match.radiant_logo_id # Integer, Radiant logo's UGC ID
182
- match.radiant_name # String, Radiant team's name
183
- match.radiant_complete? # Boolean, true if the Radiant team's roster is complete
184
- match.radiant_tower_status # Integer, See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails # Tower_Status
185
- match.radiant_barracks_status # Integer, See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails # Barracks_Status
186
-
187
- match.dire_id # Integer, Dire team's ID
188
- match.dire_captain_id # Integer, Dire captain's 32-bit Steam ID
189
- match.dire_logo_id # Integer, Dire logo's UGC ID
190
- match.dire_name # String, Dire team's name
191
- match.dire_complete? # Boolean, true if the Dire team's roster is complete
192
- match.dire_tower_status # Integer, See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails # Tower_Status
193
- match.dire_barracks_status # Integer, See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails # Barracks_Status
170
+ match.radiant # Dota::API::Match::Side, Info about the team on the Radiant side
171
+ match.dire # Dota::API::Match::Side, Info about the team on the Dire side
172
+
173
+ match.id # Integer, ID of the match
174
+ match.league_id # Integer, ID of the league this match was a part of
175
+ match.type # String, See Dota::API::Match::TYPES
176
+ match.type_id # Integer, See Dota::API::Match::TYPES
177
+ match.mode # String, See Dota::API::Match::MODES
178
+ match.mode_id # Integer, See Dota::API::Match::MODES
179
+ match.sequence # Integer, A 'sequence number', representing the order in which matches were recorded
180
+ match.season # Integer, Season the match was played in
181
+ match.cluster # Integer, Server cluster the match was played on
182
+ match.starts_at # Time, When the match started
183
+ match.first_blood # Integer, Seconds since the match started when first blood occured
184
+ match.duration # Integer, Length of the match, in seconds since the match began
185
+ match.winner # Symbol, :radiant or :dire
186
+ match.positive_votes # Integer, Number of thumbs-up the game has received
187
+ match.negative_votes # Integer, Number of thumbs-down the game has received
188
+ match.players_count # Integer, Number of players in the match
189
+
190
+ match.drafts # Array[Dota::API::Match::Draft], Picks and bans in the match, if the game mode is "Captains Mode"
191
+
192
+ # Dota::API::Match::Draft
193
+ draft.order # Integer, 1-20
194
+ draft.pick? # Boolean, true if the draft is a pick, and not a ban
195
+ draft.team # Symbol, :radiant or :dire
196
+ draft.hero # Dota::API::Hero, Picked or banned hero
194
197
  ```
195
198
 
196
- #### Players
199
+ #### Live Matches
200
+
201
+ ```ruby
202
+ live_match.radiant # Dota::API::LiveMatch::Side, Info about the team on the Radiant side
203
+ live_match.dire # Dota::API::LiveMatch::Side, Info about the team on the Dire side
204
+
205
+ live_match.id # Integer, ID of the match
206
+ live_match.lobby_id # Integer, ID of the lobby
207
+ live_match.spectators_count # Integer, Number of spectators watching on DotaTV
208
+ live_match.league_id # Integer, ID of the league
209
+ live_match.stream_delay # Integer, Number of seconds the stream is behind actual game time
210
+ live_match.series_type # Integer, Best of X series
211
+ live_match.league_tier # String, What tier the match's league is
212
+ live_match.duration # Integer, Length of the match, in seconds since the match began
213
+ live_match.roshan_timer # Integer, Seconds until Roshan respawns
214
+ ```
215
+
216
+ #### Scheduled Matches
197
217
 
198
218
  ```ruby
199
- player.id # Integer, 32-bit Steam ID
200
- player.hero # Dota::API::Hero, Player's hero
201
- player.items # Array[Dota::API::Item], Player's inventory (6 items)
202
- player.slot # Integer, See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails#Player_Slot
203
- player.status # Symbol, :played, :left_safe, :abandoned, or :bot
204
- player.level # Integer, The player's level at match end
205
- player.kills # Integer, Number of kills attributed to this player
206
- player.deaths # Integer, Times this player died during the match
207
- player.assists # Integer, Number of assists the player got
208
- player.last_hits # Integer, Number of last-hits the player got
209
- player.denies # Integer, Number of denies the player got
210
- player.gold # Integer, Amount of gold the player had remaining at the end of the match
211
- player.gold_spent # Integer, Amount of gold the player spent
212
- player.gpm # Integer, Player's overall gold/minute
213
- player.xpm # Integer, Player's overall experience/minute
214
- player.hero_damage # Integer, Amount of damage the player dealt to heroes
215
- player.tower_damage # Integer, Amount of damage the player dealt to towers
216
- player.hero_healing # Integer, Amount of health the player had healed on heroes
219
+ scheduled_match.league_id # Integer, ID of the league
220
+ scheduled_match.game_id # Integer, ID of the game
221
+ scheduled_match.teams # Array[Dota::API::Team], List of teams who are playing each other
222
+ scheduled_match.starts_at # Time, When the match is scheduled to start
223
+ scheduled_match.description # String, Description of the match
224
+ scheduled_match.final? # Boolean, true if the game is the last of the series
217
225
  ```
218
226
 
219
- #### Drafts
227
+ #### Sides - Radiant/Dire
220
228
 
221
229
  ```ruby
222
- draft.order # Integer, 1-20
223
- draft.pick? # Boolean, true if the draft is a pick, and not a ban
224
- draft.team # Symbol, :radiant or :dire
225
- draft.hero # Dota::API::Hero, Picked or banned hero
230
+ radiant.id # Integer, Team's ID
231
+ radiant.logo_id # Integer, Team logo's UGC ID
232
+ radiant.name # String, Team's name
233
+ radiant.complete? # Boolean, true if the team's roster is complete
234
+ radiant.players # Array[Dota::API::Match::Player|Dota::API::LiveMatch::Player], Players in the match
235
+
236
+ # Additional methods in Match::Side
237
+ radiant.captain_id # Integer, Team captain's 32-bit Steam ID
238
+
239
+ # Additional methods in LiveMatch::Side
240
+ radiant.score # Integer, The team's current score
241
+ radiant.series_wins # Integer, Number of wins in the series so far
242
+ ```
243
+
244
+ #### Players
245
+
246
+ ```ruby
247
+ player.id # Integer, 32-bit Steam ID
248
+ player.hero # Dota::API::Hero, Player's hero
249
+ player.items # Array[Dota::API::Item], Player's inventory (6 items)
250
+ player.slot # Integer, See https://wiki.teamfortress.com/wiki/WebAPI/GetMatchDetails#Player_Slot
251
+ player.level # Integer, The player's level at match end
252
+ player.kills # Integer, Number of kills attributed to this player
253
+ player.deaths # Integer, Times this player died during the match
254
+ player.assists # Integer, Number of assists the player got
255
+ player.last_hits # Integer, Number of last-hits the player got
256
+ player.denies # Integer, Number of denies the player got
257
+ player.gold # Integer, Amount of gold the player had remaining at the end of the match
258
+ player.gpm # Integer, Player's overall gold/minute
259
+ player.xpm # Integer, Player's overall experience/minute
260
+
261
+ # Additional methods in Match::Player
262
+ player.status # Symbol, :played, :left_safe, :abandoned, or :bot
263
+ player.gold_spent # Integer, Amount of gold the player spent
264
+ player.hero_damage # Integer, Amount of damage the player dealt to heroes
265
+ player.tower_damage # Integer, Amount of damage the player dealt to towers
266
+ player.hero_healing # Integer, Amount of health the player had healed on heroes
267
+
268
+ # Additional methods in LiveMatch::Player
269
+ player.name # String, Name of the player
270
+ player.net_worth # Integer
271
+ player.ultimate_state # Integer
272
+ player.ultimate_cooldown # Integer
273
+ player.respawn_timer # Integer
274
+ player.position_x # Float
275
+ player.position_y # Float
226
276
  ```
227
277
 
228
278
  #### Cosmetic Rarities
@@ -242,23 +292,6 @@ friend.relationship # String, Relation to the player
242
292
  friend.made_at # Time, When the friend was added to the player's friend list
243
293
  ```
244
294
 
245
- #### Live Matches
246
- ```ruby
247
- live_matches.id # Integer, ID of the match
248
- live_matches.lobby_id # Integer, ID of the lobby
249
- live_matches.spectators_count # Integer, Number of spectators watching on DotaTV
250
- live_matches.league_id # Integer, ID of the league
251
- live_matches.stream_delay # Integer, Number of seconds the stream is behind actual game time
252
- live_matches.radiant_series_wins # Integer, Number of wins the Radiant team has in the series
253
- live_matches.dire_series_wins # Integer, Number of wins the Dire team has in the series
254
- live_matches.radiant # Dota::API::LiveMatch::Side, Info about the team on the Radiant side
255
- live_matches.dire # Dota::API::LiveMatch::Side, Info about the team on the Dire side
256
- live_matches.series_type # Integer, Best of X series
257
- live_matches.league_tier # String, What tier the match's league is
258
- live_matches.players # Array[Dota::API::LiveMatch::Players], High level info about the players in the match (some redundant info in scoreboard)
259
- live_matches.scoreboard # Hash, Details of the scoreboard (to be converted soon to an object and/or integrated with our players class)
260
- ```
261
-
262
295
  ## Contributing
263
296
 
264
297
  1. [Fork it!](https://github.com/vinnicc/dota/fork)
@@ -0,0 +1,327 @@
1
+ 1:
2
+ - antimage
3
+ - Anti-Mage
4
+ 2:
5
+ - axe
6
+ - Axe
7
+ 3:
8
+ - bane
9
+ - Bane
10
+ 4:
11
+ - bloodseeker
12
+ - Bloodseeker
13
+ 5:
14
+ - crystal_maiden
15
+ - Crystal Maiden
16
+ 6:
17
+ - drow_ranger
18
+ - Drow Ranger
19
+ 7:
20
+ - earthshaker
21
+ - Earthshaker
22
+ 8:
23
+ - juggernaut
24
+ - Juggernaut
25
+ 9:
26
+ - mirana
27
+ - Mirana
28
+ 10:
29
+ - morphling
30
+ - Morphling
31
+ 11:
32
+ - nevermore
33
+ - Shadow Fiend
34
+ 12:
35
+ - phantom_lancer
36
+ - Phantom Lancer
37
+ 13:
38
+ - puck
39
+ - Puck
40
+ 14:
41
+ - pudge
42
+ - Pudge
43
+ 15:
44
+ - razor
45
+ - Razor
46
+ 16:
47
+ - sand_king
48
+ - Sand King
49
+ 17:
50
+ - storm_spirit
51
+ - Storm Spirit
52
+ 18:
53
+ - sven
54
+ - Sven
55
+ 19:
56
+ - tiny
57
+ - Tiny
58
+ 20:
59
+ - vengefulspirit
60
+ - Vengeful Spirit
61
+ 21:
62
+ - windrunner
63
+ - Windranger
64
+ 22:
65
+ - zuus
66
+ - Zeus
67
+ 23:
68
+ - kunkka
69
+ - Kunkka
70
+ 25:
71
+ - lina
72
+ - Lina
73
+ 26:
74
+ - lion
75
+ - Lion
76
+ 27:
77
+ - shadow_shaman
78
+ - Shadow Shaman
79
+ 28:
80
+ - slardar
81
+ - Slardar
82
+ 29:
83
+ - tidehunter
84
+ - Tidehunter
85
+ 30:
86
+ - witch_doctor
87
+ - Witch Doctor
88
+ 31:
89
+ - lich
90
+ - Lich
91
+ 32:
92
+ - riki
93
+ - Riki
94
+ 33:
95
+ - enigma
96
+ - Enigma
97
+ 34:
98
+ - tinker
99
+ - Tinker
100
+ 35:
101
+ - sniper
102
+ - Sniper
103
+ 36:
104
+ - necrolyte
105
+ - Necrophos
106
+ 37:
107
+ - warlock
108
+ - Warlock
109
+ 38:
110
+ - beastmaster
111
+ - Beastmaster
112
+ 39:
113
+ - queenofpain
114
+ - Queen of Pain
115
+ 40:
116
+ - venomancer
117
+ - Venomancer
118
+ 41:
119
+ - faceless_void
120
+ - Faceless Void
121
+ 42:
122
+ - skeleton_king
123
+ - Wraith King
124
+ 43:
125
+ - death_prophet
126
+ - Death Prophet
127
+ 44:
128
+ - phantom_assassin
129
+ - Phantom Assassin
130
+ 45:
131
+ - pugna
132
+ - Pugna
133
+ 46:
134
+ - templar_assassin
135
+ - Templar Assassin
136
+ 47:
137
+ - viper
138
+ - Viper
139
+ 48:
140
+ - luna
141
+ - Luna
142
+ 49:
143
+ - dragon_knight
144
+ - Dragon Knight
145
+ 50:
146
+ - dazzle
147
+ - Dazzle
148
+ 51:
149
+ - rattletrap
150
+ - Clockwerk
151
+ 52:
152
+ - leshrac
153
+ - Leshrac
154
+ 53:
155
+ - furion
156
+ - Nature's Prophet
157
+ 54:
158
+ - life_stealer
159
+ - Lifestealer
160
+ 55:
161
+ - dark_seer
162
+ - Dark Seer
163
+ 56:
164
+ - clinkz
165
+ - Clinkz
166
+ 57:
167
+ - omniknight
168
+ - Omniknight
169
+ 58:
170
+ - enchantress
171
+ - Enchantress
172
+ 59:
173
+ - huskar
174
+ - Huskar
175
+ 60:
176
+ - night_stalker
177
+ - Night Stalker
178
+ 61:
179
+ - broodmother
180
+ - Broodmother
181
+ 62:
182
+ - bounty_hunter
183
+ - Bounty Hunter
184
+ 63:
185
+ - weaver
186
+ - Weaver
187
+ 64:
188
+ - jakiro
189
+ - Jakiro
190
+ 65:
191
+ - batrider
192
+ - Batrider
193
+ 66:
194
+ - chen
195
+ - Chen
196
+ 67:
197
+ - spectre
198
+ - Spectre
199
+ 68:
200
+ - ancient_apparition
201
+ - Ancient Apparition
202
+ 69:
203
+ - doom_bringer
204
+ - Doom
205
+ 70:
206
+ - ursa
207
+ - Ursa
208
+ 71:
209
+ - spirit_breaker
210
+ - Spirit Breaker
211
+ 72:
212
+ - gyrocopter
213
+ - Gyrocopter
214
+ 73:
215
+ - alchemist
216
+ - Alchemist
217
+ 74:
218
+ - invoker
219
+ - Invoker
220
+ 75:
221
+ - silencer
222
+ - Silencer
223
+ 76:
224
+ - obsidian_destroyer
225
+ - Outworld Devourer
226
+ 77:
227
+ - lycan
228
+ - Lycan
229
+ 78:
230
+ - brewmaster
231
+ - Brewmaster
232
+ 79:
233
+ - shadow_demon
234
+ - Shadow Demon
235
+ 80:
236
+ - lone_druid
237
+ - Lone Druid
238
+ 81:
239
+ - chaos_knight
240
+ - Chaos Knight
241
+ 82:
242
+ - meepo
243
+ - Meepo
244
+ 83:
245
+ - treant
246
+ - Treant Protector
247
+ 84:
248
+ - ogre_magi
249
+ - Ogre Magi
250
+ 85:
251
+ - undying
252
+ - Undying
253
+ 86:
254
+ - rubick
255
+ - Rubick
256
+ 87:
257
+ - disruptor
258
+ - Disruptor
259
+ 88:
260
+ - nyx_assassin
261
+ - Nyx Assassin
262
+ 89:
263
+ - naga_siren
264
+ - Naga Siren
265
+ 90:
266
+ - keeper_of_the_light
267
+ - Keeper of the Light
268
+ 91:
269
+ - wisp
270
+ - Io
271
+ 92:
272
+ - visage
273
+ - Visage
274
+ 93:
275
+ - slark
276
+ - Slark
277
+ 94:
278
+ - medusa
279
+ - Medusa
280
+ 95:
281
+ - troll_warlord
282
+ - Troll Warlord
283
+ 96:
284
+ - centaur
285
+ - Centaur Warrunner
286
+ 97:
287
+ - magnataur
288
+ - Magnus
289
+ 98:
290
+ - shredder
291
+ - Timbersaw
292
+ 99:
293
+ - bristleback
294
+ - Bristleback
295
+ 100:
296
+ - tusk
297
+ - Tusk
298
+ 101:
299
+ - skywrath_mage
300
+ - Skywrath Mage
301
+ 102:
302
+ - abaddon
303
+ - Abaddon
304
+ 103:
305
+ - elder_titan
306
+ - Elder Titan
307
+ 104:
308
+ - legion_commander
309
+ - Legion Commander
310
+ 105:
311
+ - techies
312
+ - Techies
313
+ 106:
314
+ - ember_spirit
315
+ - Ember Spirit
316
+ 107:
317
+ - earth_spirit
318
+ - Earth Spirit
319
+ 109:
320
+ - terrorblade
321
+ - Terrorblade
322
+ 110:
323
+ - phoenix
324
+ - Phoenix
325
+ 111:
326
+ - oracle
327
+ - Oracle