dota 0.0.12 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
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