diff --git a/package-lock.json b/package-lock.json index 5087b1b..036d4a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lexogrine_dota2_hud", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5428,9 +5428,9 @@ } }, "dotagsi": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/dotagsi/-/dotagsi-1.0.7.tgz", - "integrity": "sha512-o4AgDbuU1F357zjCGGbIKT/6ucFnokjYapr9q96Zs+YNhu8XxGIAxfNcaUjHaMUYS0f4VRiCpP+jGqHE3qZ9qQ==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dotagsi/-/dotagsi-1.1.3.tgz", + "integrity": "sha512-6xVd4f9umWEvth2Jf4XThd4AuF2AIyrt9q+iYaC8I0sKFGwko3drUdM1HOzOb/3YSjPPNF5ni07eP4ZC589l9Q==" }, "dotenv": { "version": "8.2.0", diff --git a/package.json b/package.json index 93601fa..55da995 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lexogrine_dota2_hud", - "version": "1.0.0", + "version": "1.1.0", "homepage": "./", "private": true, "dependencies": { @@ -9,7 +9,7 @@ "@types/node": "12.11.1", "@types/react": "16.9.9", "@types/react-dom": "16.9.2", - "dotagsi": "^1.0.7", + "dotagsi": "^1.1.3", "query-string": "^6.12.1", "react": "^16.13.1", "react-dom": "^16.13.1", diff --git a/public/heroes/animated/npc_dota_hero_abaddon.webm b/public/heroes/animated/npc_dota_hero_abaddon.webm new file mode 100644 index 0000000..f73b88f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_abaddon.webm differ diff --git a/public/heroes/animated/npc_dota_hero_abyssal_underlord.webm b/public/heroes/animated/npc_dota_hero_abyssal_underlord.webm new file mode 100644 index 0000000..72206a6 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_abyssal_underlord.webm differ diff --git a/public/heroes/animated/npc_dota_hero_alchemist.webm b/public/heroes/animated/npc_dota_hero_alchemist.webm new file mode 100644 index 0000000..913d8ec Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_alchemist.webm differ diff --git a/public/heroes/animated/npc_dota_hero_ancient_apparition.webm b/public/heroes/animated/npc_dota_hero_ancient_apparition.webm new file mode 100644 index 0000000..46bcc3f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_ancient_apparition.webm differ diff --git a/public/heroes/animated/npc_dota_hero_antimage.webm b/public/heroes/animated/npc_dota_hero_antimage.webm new file mode 100644 index 0000000..422a1d4 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_antimage.webm differ diff --git a/public/heroes/animated/npc_dota_hero_arc_warden.webm b/public/heroes/animated/npc_dota_hero_arc_warden.webm new file mode 100644 index 0000000..685e399 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_arc_warden.webm differ diff --git a/public/heroes/animated/npc_dota_hero_armadillo.webm b/public/heroes/animated/npc_dota_hero_armadillo.webm new file mode 100644 index 0000000..2f0df1b Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_armadillo.webm differ diff --git a/public/heroes/animated/npc_dota_hero_axe.webm b/public/heroes/animated/npc_dota_hero_axe.webm new file mode 100644 index 0000000..316f79a Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_axe.webm differ diff --git a/public/heroes/animated/npc_dota_hero_bane.webm b/public/heroes/animated/npc_dota_hero_bane.webm new file mode 100644 index 0000000..ee0ecfb Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_bane.webm differ diff --git a/public/heroes/animated/npc_dota_hero_batrider.webm b/public/heroes/animated/npc_dota_hero_batrider.webm new file mode 100644 index 0000000..7a98065 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_batrider.webm differ diff --git a/public/heroes/animated/npc_dota_hero_beastmaster.webm b/public/heroes/animated/npc_dota_hero_beastmaster.webm new file mode 100644 index 0000000..05cf4f5 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_beastmaster.webm differ diff --git a/public/heroes/animated/npc_dota_hero_bloodseeker.webm b/public/heroes/animated/npc_dota_hero_bloodseeker.webm new file mode 100644 index 0000000..85fea23 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_bloodseeker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_bounty_hunter.webm b/public/heroes/animated/npc_dota_hero_bounty_hunter.webm new file mode 100644 index 0000000..a693b39 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_bounty_hunter.webm differ diff --git a/public/heroes/animated/npc_dota_hero_brewmaster.webm b/public/heroes/animated/npc_dota_hero_brewmaster.webm new file mode 100644 index 0000000..2074de1 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_brewmaster.webm differ diff --git a/public/heroes/animated/npc_dota_hero_bristleback.webm b/public/heroes/animated/npc_dota_hero_bristleback.webm new file mode 100644 index 0000000..fbfa39c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_bristleback.webm differ diff --git a/public/heroes/animated/npc_dota_hero_broodmother.webm b/public/heroes/animated/npc_dota_hero_broodmother.webm new file mode 100644 index 0000000..dc8bf48 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_broodmother.webm differ diff --git a/public/heroes/animated/npc_dota_hero_centaur.webm b/public/heroes/animated/npc_dota_hero_centaur.webm new file mode 100644 index 0000000..861410f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_centaur.webm differ diff --git a/public/heroes/animated/npc_dota_hero_chaos_knight.webm b/public/heroes/animated/npc_dota_hero_chaos_knight.webm new file mode 100644 index 0000000..714e955 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_chaos_knight.webm differ diff --git a/public/heroes/animated/npc_dota_hero_chen.webm b/public/heroes/animated/npc_dota_hero_chen.webm new file mode 100644 index 0000000..212d645 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_chen.webm differ diff --git a/public/heroes/animated/npc_dota_hero_clinkz.webm b/public/heroes/animated/npc_dota_hero_clinkz.webm new file mode 100644 index 0000000..7369c0e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_clinkz.webm differ diff --git a/public/heroes/animated/npc_dota_hero_crystal_maiden.webm b/public/heroes/animated/npc_dota_hero_crystal_maiden.webm new file mode 100644 index 0000000..99dd6c2 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_crystal_maiden.webm differ diff --git a/public/heroes/animated/npc_dota_hero_dark_seer.webm b/public/heroes/animated/npc_dota_hero_dark_seer.webm new file mode 100644 index 0000000..7767c8b Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_dark_seer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_dark_willow.webm b/public/heroes/animated/npc_dota_hero_dark_willow.webm new file mode 100644 index 0000000..7e54aef Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_dark_willow.webm differ diff --git a/public/heroes/animated/npc_dota_hero_dawnbreaker.webm b/public/heroes/animated/npc_dota_hero_dawnbreaker.webm new file mode 100644 index 0000000..9685f6f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_dawnbreaker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_dazzle.webm b/public/heroes/animated/npc_dota_hero_dazzle.webm new file mode 100644 index 0000000..eb959d2 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_dazzle.webm differ diff --git a/public/heroes/animated/npc_dota_hero_death_prophet.webm b/public/heroes/animated/npc_dota_hero_death_prophet.webm new file mode 100644 index 0000000..a809d9e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_death_prophet.webm differ diff --git a/public/heroes/animated/npc_dota_hero_disruptor.webm b/public/heroes/animated/npc_dota_hero_disruptor.webm new file mode 100644 index 0000000..392ba08 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_disruptor.webm differ diff --git a/public/heroes/animated/npc_dota_hero_doom_bringer.webm b/public/heroes/animated/npc_dota_hero_doom_bringer.webm new file mode 100644 index 0000000..9afae2c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_doom_bringer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_dragon_knight.webm b/public/heroes/animated/npc_dota_hero_dragon_knight.webm new file mode 100644 index 0000000..0538ed6 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_dragon_knight.webm differ diff --git a/public/heroes/animated/npc_dota_hero_drow_ranger.webm b/public/heroes/animated/npc_dota_hero_drow_ranger.webm new file mode 100644 index 0000000..7ee67a5 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_drow_ranger.webm differ diff --git a/public/heroes/animated/npc_dota_hero_earth_spirit.webm b/public/heroes/animated/npc_dota_hero_earth_spirit.webm new file mode 100644 index 0000000..e324efe Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_earth_spirit.webm differ diff --git a/public/heroes/animated/npc_dota_hero_earthshaker.webm b/public/heroes/animated/npc_dota_hero_earthshaker.webm new file mode 100644 index 0000000..7cf8d94 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_earthshaker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_elder_titan.webm b/public/heroes/animated/npc_dota_hero_elder_titan.webm new file mode 100644 index 0000000..7629e60 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_elder_titan.webm differ diff --git a/public/heroes/animated/npc_dota_hero_ember_spirit.webm b/public/heroes/animated/npc_dota_hero_ember_spirit.webm new file mode 100644 index 0000000..6b200a7 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_ember_spirit.webm differ diff --git a/public/heroes/animated/npc_dota_hero_enchantress.webm b/public/heroes/animated/npc_dota_hero_enchantress.webm new file mode 100644 index 0000000..1727dac Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_enchantress.webm differ diff --git a/public/heroes/animated/npc_dota_hero_enigma.webm b/public/heroes/animated/npc_dota_hero_enigma.webm new file mode 100644 index 0000000..2a0d63c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_enigma.webm differ diff --git a/public/heroes/animated/npc_dota_hero_faceless_void.webm b/public/heroes/animated/npc_dota_hero_faceless_void.webm new file mode 100644 index 0000000..e974930 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_faceless_void.webm differ diff --git a/public/heroes/animated/npc_dota_hero_furion.webm b/public/heroes/animated/npc_dota_hero_furion.webm new file mode 100644 index 0000000..9bef1f5 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_furion.webm differ diff --git a/public/heroes/animated/npc_dota_hero_grimstroke.webm b/public/heroes/animated/npc_dota_hero_grimstroke.webm new file mode 100644 index 0000000..581f517 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_grimstroke.webm differ diff --git a/public/heroes/animated/npc_dota_hero_gyrocopter.webm b/public/heroes/animated/npc_dota_hero_gyrocopter.webm new file mode 100644 index 0000000..959321e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_gyrocopter.webm differ diff --git a/public/heroes/animated/npc_dota_hero_hoodwink.webm b/public/heroes/animated/npc_dota_hero_hoodwink.webm new file mode 100644 index 0000000..b9e81dc Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_hoodwink.webm differ diff --git a/public/heroes/animated/npc_dota_hero_huskar.webm b/public/heroes/animated/npc_dota_hero_huskar.webm new file mode 100644 index 0000000..d90314f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_huskar.webm differ diff --git a/public/heroes/animated/npc_dota_hero_invoker.webm b/public/heroes/animated/npc_dota_hero_invoker.webm new file mode 100644 index 0000000..4acaab7 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_invoker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_invoker_persona1.webm b/public/heroes/animated/npc_dota_hero_invoker_persona1.webm new file mode 100644 index 0000000..59ed7c9 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_invoker_persona1.webm differ diff --git a/public/heroes/animated/npc_dota_hero_jakiro.webm b/public/heroes/animated/npc_dota_hero_jakiro.webm new file mode 100644 index 0000000..f9780b4 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_jakiro.webm differ diff --git a/public/heroes/animated/npc_dota_hero_juggernaut.webm b/public/heroes/animated/npc_dota_hero_juggernaut.webm new file mode 100644 index 0000000..8835c7c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_juggernaut.webm differ diff --git a/public/heroes/animated/npc_dota_hero_keeper_of_the_light.webm b/public/heroes/animated/npc_dota_hero_keeper_of_the_light.webm new file mode 100644 index 0000000..86a80c5 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_keeper_of_the_light.webm differ diff --git a/public/heroes/animated/npc_dota_hero_kunkka.webm b/public/heroes/animated/npc_dota_hero_kunkka.webm new file mode 100644 index 0000000..6070f98 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_kunkka.webm differ diff --git a/public/heroes/animated/npc_dota_hero_legion_commander.webm b/public/heroes/animated/npc_dota_hero_legion_commander.webm new file mode 100644 index 0000000..efe6a75 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_legion_commander.webm differ diff --git a/public/heroes/animated/npc_dota_hero_leshrac.webm b/public/heroes/animated/npc_dota_hero_leshrac.webm new file mode 100644 index 0000000..9ffc457 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_leshrac.webm differ diff --git a/public/heroes/animated/npc_dota_hero_lich.webm b/public/heroes/animated/npc_dota_hero_lich.webm new file mode 100644 index 0000000..aaf3f6f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_lich.webm differ diff --git a/public/heroes/animated/npc_dota_hero_life_stealer.webm b/public/heroes/animated/npc_dota_hero_life_stealer.webm new file mode 100644 index 0000000..d10d384 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_life_stealer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_lina.webm b/public/heroes/animated/npc_dota_hero_lina.webm new file mode 100644 index 0000000..584694b Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_lina.webm differ diff --git a/public/heroes/animated/npc_dota_hero_lion.webm b/public/heroes/animated/npc_dota_hero_lion.webm new file mode 100644 index 0000000..e6a5dab Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_lion.webm differ diff --git a/public/heroes/animated/npc_dota_hero_lone_druid.webm b/public/heroes/animated/npc_dota_hero_lone_druid.webm new file mode 100644 index 0000000..c504669 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_lone_druid.webm differ diff --git a/public/heroes/animated/npc_dota_hero_luna.webm b/public/heroes/animated/npc_dota_hero_luna.webm new file mode 100644 index 0000000..c572b47 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_luna.webm differ diff --git a/public/heroes/animated/npc_dota_hero_lycan.webm b/public/heroes/animated/npc_dota_hero_lycan.webm new file mode 100644 index 0000000..3f710d3 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_lycan.webm differ diff --git a/public/heroes/animated/npc_dota_hero_magnataur.webm b/public/heroes/animated/npc_dota_hero_magnataur.webm new file mode 100644 index 0000000..ba4fd20 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_magnataur.webm differ diff --git a/public/heroes/animated/npc_dota_hero_mars.webm b/public/heroes/animated/npc_dota_hero_mars.webm new file mode 100644 index 0000000..258881e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_mars.webm differ diff --git a/public/heroes/animated/npc_dota_hero_medusa.webm b/public/heroes/animated/npc_dota_hero_medusa.webm new file mode 100644 index 0000000..71cece9 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_medusa.webm differ diff --git a/public/heroes/animated/npc_dota_hero_meepo.webm b/public/heroes/animated/npc_dota_hero_meepo.webm new file mode 100644 index 0000000..4474fbf Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_meepo.webm differ diff --git a/public/heroes/animated/npc_dota_hero_mirana.webm b/public/heroes/animated/npc_dota_hero_mirana.webm new file mode 100644 index 0000000..7550088 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_mirana.webm differ diff --git a/public/heroes/animated/npc_dota_hero_monkey_king.webm b/public/heroes/animated/npc_dota_hero_monkey_king.webm new file mode 100644 index 0000000..03c5502 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_monkey_king.webm differ diff --git a/public/heroes/animated/npc_dota_hero_morphling.webm b/public/heroes/animated/npc_dota_hero_morphling.webm new file mode 100644 index 0000000..e31c6af Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_morphling.webm differ diff --git a/public/heroes/animated/npc_dota_hero_naga_siren.webm b/public/heroes/animated/npc_dota_hero_naga_siren.webm new file mode 100644 index 0000000..43c9c8d Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_naga_siren.webm differ diff --git a/public/heroes/animated/npc_dota_hero_necrolyte.webm b/public/heroes/animated/npc_dota_hero_necrolyte.webm new file mode 100644 index 0000000..15deea3 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_necrolyte.webm differ diff --git a/public/heroes/animated/npc_dota_hero_nevermore.webm b/public/heroes/animated/npc_dota_hero_nevermore.webm new file mode 100644 index 0000000..293b83c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_nevermore.webm differ diff --git a/public/heroes/animated/npc_dota_hero_night_stalker.webm b/public/heroes/animated/npc_dota_hero_night_stalker.webm new file mode 100644 index 0000000..75545b2 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_night_stalker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_nyx_assassin.webm b/public/heroes/animated/npc_dota_hero_nyx_assassin.webm new file mode 100644 index 0000000..6e7b28f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_nyx_assassin.webm differ diff --git a/public/heroes/animated/npc_dota_hero_obsidian_destroyer.webm b/public/heroes/animated/npc_dota_hero_obsidian_destroyer.webm new file mode 100644 index 0000000..aaf7424 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_obsidian_destroyer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_ogre_magi.webm b/public/heroes/animated/npc_dota_hero_ogre_magi.webm new file mode 100644 index 0000000..8462d48 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_ogre_magi.webm differ diff --git a/public/heroes/animated/npc_dota_hero_omniknight.webm b/public/heroes/animated/npc_dota_hero_omniknight.webm new file mode 100644 index 0000000..05e89f4 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_omniknight.webm differ diff --git a/public/heroes/animated/npc_dota_hero_oracle.webm b/public/heroes/animated/npc_dota_hero_oracle.webm new file mode 100644 index 0000000..7fbadb8 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_oracle.webm differ diff --git a/public/heroes/animated/npc_dota_hero_pangolier.webm b/public/heroes/animated/npc_dota_hero_pangolier.webm new file mode 100644 index 0000000..05f9b80 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_pangolier.webm differ diff --git a/public/heroes/animated/npc_dota_hero_phantom_assassin.webm b/public/heroes/animated/npc_dota_hero_phantom_assassin.webm new file mode 100644 index 0000000..7263f05 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_phantom_assassin.webm differ diff --git a/public/heroes/animated/npc_dota_hero_phantom_lancer.webm b/public/heroes/animated/npc_dota_hero_phantom_lancer.webm new file mode 100644 index 0000000..1da9422 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_phantom_lancer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_phoenix.webm b/public/heroes/animated/npc_dota_hero_phoenix.webm new file mode 100644 index 0000000..0fedf4c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_phoenix.webm differ diff --git a/public/heroes/animated/npc_dota_hero_puck.webm b/public/heroes/animated/npc_dota_hero_puck.webm new file mode 100644 index 0000000..37a4d31 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_puck.webm differ diff --git a/public/heroes/animated/npc_dota_hero_pudge.webm b/public/heroes/animated/npc_dota_hero_pudge.webm new file mode 100644 index 0000000..43632e9 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_pudge.webm differ diff --git a/public/heroes/animated/npc_dota_hero_pugna.webm b/public/heroes/animated/npc_dota_hero_pugna.webm new file mode 100644 index 0000000..e1efa7e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_pugna.webm differ diff --git a/public/heroes/animated/npc_dota_hero_queenofpain.webm b/public/heroes/animated/npc_dota_hero_queenofpain.webm new file mode 100644 index 0000000..c70e742 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_queenofpain.webm differ diff --git a/public/heroes/animated/npc_dota_hero_rattletrap.webm b/public/heroes/animated/npc_dota_hero_rattletrap.webm new file mode 100644 index 0000000..8e56f22 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_rattletrap.webm differ diff --git a/public/heroes/animated/npc_dota_hero_razor.webm b/public/heroes/animated/npc_dota_hero_razor.webm new file mode 100644 index 0000000..3826846 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_razor.webm differ diff --git a/public/heroes/animated/npc_dota_hero_riki.webm b/public/heroes/animated/npc_dota_hero_riki.webm new file mode 100644 index 0000000..2b9d4f9 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_riki.webm differ diff --git a/public/heroes/animated/npc_dota_hero_rubick.webm b/public/heroes/animated/npc_dota_hero_rubick.webm new file mode 100644 index 0000000..25188c9 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_rubick.webm differ diff --git a/public/heroes/animated/npc_dota_hero_sand_king.webm b/public/heroes/animated/npc_dota_hero_sand_king.webm new file mode 100644 index 0000000..00e768e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_sand_king.webm differ diff --git a/public/heroes/animated/npc_dota_hero_shadow_demon.webm b/public/heroes/animated/npc_dota_hero_shadow_demon.webm new file mode 100644 index 0000000..1517d54 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_shadow_demon.webm differ diff --git a/public/heroes/animated/npc_dota_hero_shadow_shaman.webm b/public/heroes/animated/npc_dota_hero_shadow_shaman.webm new file mode 100644 index 0000000..d8dee9e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_shadow_shaman.webm differ diff --git a/public/heroes/animated/npc_dota_hero_shredder.webm b/public/heroes/animated/npc_dota_hero_shredder.webm new file mode 100644 index 0000000..bc02e96 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_shredder.webm differ diff --git a/public/heroes/animated/npc_dota_hero_silencer.webm b/public/heroes/animated/npc_dota_hero_silencer.webm new file mode 100644 index 0000000..c041417 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_silencer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_skeleton_king.webm b/public/heroes/animated/npc_dota_hero_skeleton_king.webm new file mode 100644 index 0000000..4a74f4b Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_skeleton_king.webm differ diff --git a/public/heroes/animated/npc_dota_hero_skywrath_mage.webm b/public/heroes/animated/npc_dota_hero_skywrath_mage.webm new file mode 100644 index 0000000..a328d21 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_skywrath_mage.webm differ diff --git a/public/heroes/animated/npc_dota_hero_slardar.webm b/public/heroes/animated/npc_dota_hero_slardar.webm new file mode 100644 index 0000000..d4be161 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_slardar.webm differ diff --git a/public/heroes/animated/npc_dota_hero_slark.webm b/public/heroes/animated/npc_dota_hero_slark.webm new file mode 100644 index 0000000..f088945 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_slark.webm differ diff --git a/public/heroes/animated/npc_dota_hero_snapfire.webm b/public/heroes/animated/npc_dota_hero_snapfire.webm new file mode 100644 index 0000000..5aed28a Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_snapfire.webm differ diff --git a/public/heroes/animated/npc_dota_hero_sniper.webm b/public/heroes/animated/npc_dota_hero_sniper.webm new file mode 100644 index 0000000..f4a1a87 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_sniper.webm differ diff --git a/public/heroes/animated/npc_dota_hero_spectre.webm b/public/heroes/animated/npc_dota_hero_spectre.webm new file mode 100644 index 0000000..6b21077 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_spectre.webm differ diff --git a/public/heroes/animated/npc_dota_hero_spirit_breaker.webm b/public/heroes/animated/npc_dota_hero_spirit_breaker.webm new file mode 100644 index 0000000..538c4ec Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_spirit_breaker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_storm_spirit.webm b/public/heroes/animated/npc_dota_hero_storm_spirit.webm new file mode 100644 index 0000000..2660d73 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_storm_spirit.webm differ diff --git a/public/heroes/animated/npc_dota_hero_sven.webm b/public/heroes/animated/npc_dota_hero_sven.webm new file mode 100644 index 0000000..bb687d2 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_sven.webm differ diff --git a/public/heroes/animated/npc_dota_hero_sylph.webm b/public/heroes/animated/npc_dota_hero_sylph.webm new file mode 100644 index 0000000..0874446 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_sylph.webm differ diff --git a/public/heroes/animated/npc_dota_hero_techies.webm b/public/heroes/animated/npc_dota_hero_techies.webm new file mode 100644 index 0000000..f2c4fe2 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_techies.webm differ diff --git a/public/heroes/animated/npc_dota_hero_templar_assassin.webm b/public/heroes/animated/npc_dota_hero_templar_assassin.webm new file mode 100644 index 0000000..268b3e5 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_templar_assassin.webm differ diff --git a/public/heroes/animated/npc_dota_hero_terrorblade.webm b/public/heroes/animated/npc_dota_hero_terrorblade.webm new file mode 100644 index 0000000..6576b92 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_terrorblade.webm differ diff --git a/public/heroes/animated/npc_dota_hero_tidehunter.webm b/public/heroes/animated/npc_dota_hero_tidehunter.webm new file mode 100644 index 0000000..3e2d191 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_tidehunter.webm differ diff --git a/public/heroes/animated/npc_dota_hero_tinker.webm b/public/heroes/animated/npc_dota_hero_tinker.webm new file mode 100644 index 0000000..353f3b0 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_tinker.webm differ diff --git a/public/heroes/animated/npc_dota_hero_tiny.webm b/public/heroes/animated/npc_dota_hero_tiny.webm new file mode 100644 index 0000000..9d70d83 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_tiny.webm differ diff --git a/public/heroes/animated/npc_dota_hero_treant.webm b/public/heroes/animated/npc_dota_hero_treant.webm new file mode 100644 index 0000000..4dade4b Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_treant.webm differ diff --git a/public/heroes/animated/npc_dota_hero_troll_warlord.webm b/public/heroes/animated/npc_dota_hero_troll_warlord.webm new file mode 100644 index 0000000..fe331ef Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_troll_warlord.webm differ diff --git a/public/heroes/animated/npc_dota_hero_tusk.webm b/public/heroes/animated/npc_dota_hero_tusk.webm new file mode 100644 index 0000000..dc83650 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_tusk.webm differ diff --git a/public/heroes/animated/npc_dota_hero_undying.webm b/public/heroes/animated/npc_dota_hero_undying.webm new file mode 100644 index 0000000..bd4201e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_undying.webm differ diff --git a/public/heroes/animated/npc_dota_hero_ursa.webm b/public/heroes/animated/npc_dota_hero_ursa.webm new file mode 100644 index 0000000..6b48118 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_ursa.webm differ diff --git a/public/heroes/animated/npc_dota_hero_vengefulspirit.webm b/public/heroes/animated/npc_dota_hero_vengefulspirit.webm new file mode 100644 index 0000000..8bed9fe Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_vengefulspirit.webm differ diff --git a/public/heroes/animated/npc_dota_hero_venomancer.webm b/public/heroes/animated/npc_dota_hero_venomancer.webm new file mode 100644 index 0000000..93adfd8 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_venomancer.webm differ diff --git a/public/heroes/animated/npc_dota_hero_viper.webm b/public/heroes/animated/npc_dota_hero_viper.webm new file mode 100644 index 0000000..f869ffc Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_viper.webm differ diff --git a/public/heroes/animated/npc_dota_hero_visage.webm b/public/heroes/animated/npc_dota_hero_visage.webm new file mode 100644 index 0000000..7a79a37 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_visage.webm differ diff --git a/public/heroes/animated/npc_dota_hero_void_spirit.webm b/public/heroes/animated/npc_dota_hero_void_spirit.webm new file mode 100644 index 0000000..09ba0ea Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_void_spirit.webm differ diff --git a/public/heroes/animated/npc_dota_hero_warlock.webm b/public/heroes/animated/npc_dota_hero_warlock.webm new file mode 100644 index 0000000..f6f62cf Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_warlock.webm differ diff --git a/public/heroes/animated/npc_dota_hero_weaver.webm b/public/heroes/animated/npc_dota_hero_weaver.webm new file mode 100644 index 0000000..c66cf2f Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_weaver.webm differ diff --git a/public/heroes/animated/npc_dota_hero_windrunner.webm b/public/heroes/animated/npc_dota_hero_windrunner.webm new file mode 100644 index 0000000..626c956 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_windrunner.webm differ diff --git a/public/heroes/animated/npc_dota_hero_winter_wyvern.webm b/public/heroes/animated/npc_dota_hero_winter_wyvern.webm new file mode 100644 index 0000000..141af85 Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_winter_wyvern.webm differ diff --git a/public/heroes/animated/npc_dota_hero_wisp.webm b/public/heroes/animated/npc_dota_hero_wisp.webm new file mode 100644 index 0000000..5bf535d Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_wisp.webm differ diff --git a/public/heroes/animated/npc_dota_hero_witch_doctor.webm b/public/heroes/animated/npc_dota_hero_witch_doctor.webm new file mode 100644 index 0000000..754b68e Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_witch_doctor.webm differ diff --git a/public/heroes/animated/npc_dota_hero_zuus.webm b/public/heroes/animated/npc_dota_hero_zuus.webm new file mode 100644 index 0000000..afbbd5c Binary files /dev/null and b/public/heroes/animated/npc_dota_hero_zuus.webm differ diff --git a/public/heroes/animated/out.webm b/public/heroes/animated/out.webm new file mode 100644 index 0000000..e0f943b Binary files /dev/null and b/public/heroes/animated/out.webm differ diff --git a/public/heroes/icons/abaddon.png b/public/heroes/icons/abaddon.png new file mode 100644 index 0000000..84a4f3f Binary files /dev/null and b/public/heroes/icons/abaddon.png differ diff --git a/public/heroes/icons/abyssal_underlord.png b/public/heroes/icons/abyssal_underlord.png new file mode 100644 index 0000000..e6558c6 Binary files /dev/null and b/public/heroes/icons/abyssal_underlord.png differ diff --git a/public/heroes/icons/alchemist.png b/public/heroes/icons/alchemist.png new file mode 100644 index 0000000..a10eaea Binary files /dev/null and b/public/heroes/icons/alchemist.png differ diff --git a/public/heroes/icons/ancient_apparition.png b/public/heroes/icons/ancient_apparition.png new file mode 100644 index 0000000..b8f824b Binary files /dev/null and b/public/heroes/icons/ancient_apparition.png differ diff --git a/public/heroes/icons/antimage.png b/public/heroes/icons/antimage.png new file mode 100644 index 0000000..e37dbb4 Binary files /dev/null and b/public/heroes/icons/antimage.png differ diff --git a/public/heroes/icons/arc_warden.png b/public/heroes/icons/arc_warden.png new file mode 100644 index 0000000..cfbf4ea Binary files /dev/null and b/public/heroes/icons/arc_warden.png differ diff --git a/public/heroes/icons/axe.png b/public/heroes/icons/axe.png new file mode 100644 index 0000000..4194579 Binary files /dev/null and b/public/heroes/icons/axe.png differ diff --git a/public/heroes/icons/bane.png b/public/heroes/icons/bane.png new file mode 100644 index 0000000..e19627c Binary files /dev/null and b/public/heroes/icons/bane.png differ diff --git a/public/heroes/icons/batrider.png b/public/heroes/icons/batrider.png new file mode 100644 index 0000000..ccc94df Binary files /dev/null and b/public/heroes/icons/batrider.png differ diff --git a/public/heroes/icons/beastmaster.png b/public/heroes/icons/beastmaster.png new file mode 100644 index 0000000..5e91836 Binary files /dev/null and b/public/heroes/icons/beastmaster.png differ diff --git a/public/heroes/icons/bloodseeker.png b/public/heroes/icons/bloodseeker.png new file mode 100644 index 0000000..1cc1205 Binary files /dev/null and b/public/heroes/icons/bloodseeker.png differ diff --git a/public/heroes/icons/bounty_hunter.png b/public/heroes/icons/bounty_hunter.png new file mode 100644 index 0000000..a3e60fd Binary files /dev/null and b/public/heroes/icons/bounty_hunter.png differ diff --git a/public/heroes/icons/brewmaster.png b/public/heroes/icons/brewmaster.png new file mode 100644 index 0000000..16d3b5f Binary files /dev/null and b/public/heroes/icons/brewmaster.png differ diff --git a/public/heroes/icons/bristleback.png b/public/heroes/icons/bristleback.png new file mode 100644 index 0000000..d70902f Binary files /dev/null and b/public/heroes/icons/bristleback.png differ diff --git a/public/heroes/icons/broodmother.png b/public/heroes/icons/broodmother.png new file mode 100644 index 0000000..0461adc Binary files /dev/null and b/public/heroes/icons/broodmother.png differ diff --git a/public/heroes/icons/centaur.png b/public/heroes/icons/centaur.png new file mode 100644 index 0000000..e420e45 Binary files /dev/null and b/public/heroes/icons/centaur.png differ diff --git a/public/heroes/icons/chaos_knight.png b/public/heroes/icons/chaos_knight.png new file mode 100644 index 0000000..687a288 Binary files /dev/null and b/public/heroes/icons/chaos_knight.png differ diff --git a/public/heroes/icons/chen.png b/public/heroes/icons/chen.png new file mode 100644 index 0000000..4b3b4c7 Binary files /dev/null and b/public/heroes/icons/chen.png differ diff --git a/public/heroes/icons/clinkz.png b/public/heroes/icons/clinkz.png new file mode 100644 index 0000000..e287717 Binary files /dev/null and b/public/heroes/icons/clinkz.png differ diff --git a/public/heroes/icons/crystal_maiden.png b/public/heroes/icons/crystal_maiden.png new file mode 100644 index 0000000..ba1dd30 Binary files /dev/null and b/public/heroes/icons/crystal_maiden.png differ diff --git a/public/heroes/icons/dark_seer.png b/public/heroes/icons/dark_seer.png new file mode 100644 index 0000000..36dcdf9 Binary files /dev/null and b/public/heroes/icons/dark_seer.png differ diff --git a/public/heroes/icons/dark_willow.png b/public/heroes/icons/dark_willow.png new file mode 100644 index 0000000..28c5423 Binary files /dev/null and b/public/heroes/icons/dark_willow.png differ diff --git a/public/heroes/icons/dawnbreaker.png b/public/heroes/icons/dawnbreaker.png new file mode 100644 index 0000000..edc1ca7 Binary files /dev/null and b/public/heroes/icons/dawnbreaker.png differ diff --git a/public/heroes/icons/dazzle.png b/public/heroes/icons/dazzle.png new file mode 100644 index 0000000..0d82c95 Binary files /dev/null and b/public/heroes/icons/dazzle.png differ diff --git a/public/heroes/icons/death_prophet.png b/public/heroes/icons/death_prophet.png new file mode 100644 index 0000000..8fb6f29 Binary files /dev/null and b/public/heroes/icons/death_prophet.png differ diff --git a/public/heroes/icons/disruptor.png b/public/heroes/icons/disruptor.png new file mode 100644 index 0000000..e4feabc Binary files /dev/null and b/public/heroes/icons/disruptor.png differ diff --git a/public/heroes/icons/doom_bringer.png b/public/heroes/icons/doom_bringer.png new file mode 100644 index 0000000..9523459 Binary files /dev/null and b/public/heroes/icons/doom_bringer.png differ diff --git a/public/heroes/icons/dragon_knight.png b/public/heroes/icons/dragon_knight.png new file mode 100644 index 0000000..17ab4b4 Binary files /dev/null and b/public/heroes/icons/dragon_knight.png differ diff --git a/public/heroes/icons/drow_ranger.png b/public/heroes/icons/drow_ranger.png new file mode 100644 index 0000000..a3e7306 Binary files /dev/null and b/public/heroes/icons/drow_ranger.png differ diff --git a/public/heroes/icons/earth_spirit.png b/public/heroes/icons/earth_spirit.png new file mode 100644 index 0000000..a05a986 Binary files /dev/null and b/public/heroes/icons/earth_spirit.png differ diff --git a/public/heroes/icons/earthshaker.png b/public/heroes/icons/earthshaker.png new file mode 100644 index 0000000..227ed5c Binary files /dev/null and b/public/heroes/icons/earthshaker.png differ diff --git a/public/heroes/icons/elder_titan.png b/public/heroes/icons/elder_titan.png new file mode 100644 index 0000000..ad54f47 Binary files /dev/null and b/public/heroes/icons/elder_titan.png differ diff --git a/public/heroes/icons/ember_spirit.png b/public/heroes/icons/ember_spirit.png new file mode 100644 index 0000000..ea0a979 Binary files /dev/null and b/public/heroes/icons/ember_spirit.png differ diff --git a/public/heroes/icons/enchantress.png b/public/heroes/icons/enchantress.png new file mode 100644 index 0000000..fd44502 Binary files /dev/null and b/public/heroes/icons/enchantress.png differ diff --git a/public/heroes/icons/enigma.png b/public/heroes/icons/enigma.png new file mode 100644 index 0000000..a9ec38d Binary files /dev/null and b/public/heroes/icons/enigma.png differ diff --git a/public/heroes/icons/faceless_void.png b/public/heroes/icons/faceless_void.png new file mode 100644 index 0000000..15e1916 Binary files /dev/null and b/public/heroes/icons/faceless_void.png differ diff --git a/public/heroes/icons/furion.png b/public/heroes/icons/furion.png new file mode 100644 index 0000000..c816377 Binary files /dev/null and b/public/heroes/icons/furion.png differ diff --git a/public/heroes/icons/grimstroke.png b/public/heroes/icons/grimstroke.png new file mode 100644 index 0000000..83a1154 Binary files /dev/null and b/public/heroes/icons/grimstroke.png differ diff --git a/public/heroes/icons/gyrocopter.png b/public/heroes/icons/gyrocopter.png new file mode 100644 index 0000000..78f8989 Binary files /dev/null and b/public/heroes/icons/gyrocopter.png differ diff --git a/public/heroes/icons/hoodwink.png b/public/heroes/icons/hoodwink.png new file mode 100644 index 0000000..89cbec8 Binary files /dev/null and b/public/heroes/icons/hoodwink.png differ diff --git a/public/heroes/icons/huskar.png b/public/heroes/icons/huskar.png new file mode 100644 index 0000000..03d69ca Binary files /dev/null and b/public/heroes/icons/huskar.png differ diff --git a/public/heroes/icons/invoker.png b/public/heroes/icons/invoker.png new file mode 100644 index 0000000..12e4b3d Binary files /dev/null and b/public/heroes/icons/invoker.png differ diff --git a/public/heroes/icons/jakiro.png b/public/heroes/icons/jakiro.png new file mode 100644 index 0000000..1465505 Binary files /dev/null and b/public/heroes/icons/jakiro.png differ diff --git a/public/heroes/icons/juggernaut.png b/public/heroes/icons/juggernaut.png new file mode 100644 index 0000000..91710c1 Binary files /dev/null and b/public/heroes/icons/juggernaut.png differ diff --git a/public/heroes/icons/keeper_of_the_light.png b/public/heroes/icons/keeper_of_the_light.png new file mode 100644 index 0000000..81fd0d4 Binary files /dev/null and b/public/heroes/icons/keeper_of_the_light.png differ diff --git a/public/heroes/icons/kunkka.png b/public/heroes/icons/kunkka.png new file mode 100644 index 0000000..9952019 Binary files /dev/null and b/public/heroes/icons/kunkka.png differ diff --git a/public/heroes/icons/legion_commander.png b/public/heroes/icons/legion_commander.png new file mode 100644 index 0000000..2562371 Binary files /dev/null and b/public/heroes/icons/legion_commander.png differ diff --git a/public/heroes/icons/leshrac.png b/public/heroes/icons/leshrac.png new file mode 100644 index 0000000..9b94dc1 Binary files /dev/null and b/public/heroes/icons/leshrac.png differ diff --git a/public/heroes/icons/lich.png b/public/heroes/icons/lich.png new file mode 100644 index 0000000..93c6837 Binary files /dev/null and b/public/heroes/icons/lich.png differ diff --git a/public/heroes/icons/life_stealer.png b/public/heroes/icons/life_stealer.png new file mode 100644 index 0000000..98767b7 Binary files /dev/null and b/public/heroes/icons/life_stealer.png differ diff --git a/public/heroes/icons/lina.png b/public/heroes/icons/lina.png new file mode 100644 index 0000000..8a2cb75 Binary files /dev/null and b/public/heroes/icons/lina.png differ diff --git a/public/heroes/icons/lion.png b/public/heroes/icons/lion.png new file mode 100644 index 0000000..d135a41 Binary files /dev/null and b/public/heroes/icons/lion.png differ diff --git a/public/heroes/icons/lone_druid.png b/public/heroes/icons/lone_druid.png new file mode 100644 index 0000000..91aee8a Binary files /dev/null and b/public/heroes/icons/lone_druid.png differ diff --git a/public/heroes/icons/luna.png b/public/heroes/icons/luna.png new file mode 100644 index 0000000..b4adbcc Binary files /dev/null and b/public/heroes/icons/luna.png differ diff --git a/public/heroes/icons/lycan.png b/public/heroes/icons/lycan.png new file mode 100644 index 0000000..d5d3f5a Binary files /dev/null and b/public/heroes/icons/lycan.png differ diff --git a/public/heroes/icons/magnataur.png b/public/heroes/icons/magnataur.png new file mode 100644 index 0000000..627527f Binary files /dev/null and b/public/heroes/icons/magnataur.png differ diff --git a/public/heroes/icons/mars.png b/public/heroes/icons/mars.png new file mode 100644 index 0000000..7da1702 Binary files /dev/null and b/public/heroes/icons/mars.png differ diff --git a/public/heroes/icons/medusa.png b/public/heroes/icons/medusa.png new file mode 100644 index 0000000..66943e6 Binary files /dev/null and b/public/heroes/icons/medusa.png differ diff --git a/public/heroes/icons/meepo.png b/public/heroes/icons/meepo.png new file mode 100644 index 0000000..0ac608f Binary files /dev/null and b/public/heroes/icons/meepo.png differ diff --git a/public/heroes/icons/mirana.png b/public/heroes/icons/mirana.png new file mode 100644 index 0000000..2fbf461 Binary files /dev/null and b/public/heroes/icons/mirana.png differ diff --git a/public/heroes/icons/monkey_king.png b/public/heroes/icons/monkey_king.png new file mode 100644 index 0000000..8904c4f Binary files /dev/null and b/public/heroes/icons/monkey_king.png differ diff --git a/public/heroes/icons/morphling.png b/public/heroes/icons/morphling.png new file mode 100644 index 0000000..c703d7e Binary files /dev/null and b/public/heroes/icons/morphling.png differ diff --git a/public/heroes/icons/naga_siren.png b/public/heroes/icons/naga_siren.png new file mode 100644 index 0000000..72a9c32 Binary files /dev/null and b/public/heroes/icons/naga_siren.png differ diff --git a/public/heroes/icons/necrolyte.png b/public/heroes/icons/necrolyte.png new file mode 100644 index 0000000..41c6bac Binary files /dev/null and b/public/heroes/icons/necrolyte.png differ diff --git a/public/heroes/icons/nevermore.png b/public/heroes/icons/nevermore.png new file mode 100644 index 0000000..8b95b59 Binary files /dev/null and b/public/heroes/icons/nevermore.png differ diff --git a/public/heroes/icons/night_stalker.png b/public/heroes/icons/night_stalker.png new file mode 100644 index 0000000..c54b911 Binary files /dev/null and b/public/heroes/icons/night_stalker.png differ diff --git a/public/heroes/icons/nyx_assassin.png b/public/heroes/icons/nyx_assassin.png new file mode 100644 index 0000000..01ec940 Binary files /dev/null and b/public/heroes/icons/nyx_assassin.png differ diff --git a/public/heroes/icons/obsidian_destroyer.png b/public/heroes/icons/obsidian_destroyer.png new file mode 100644 index 0000000..60e06b0 Binary files /dev/null and b/public/heroes/icons/obsidian_destroyer.png differ diff --git a/public/heroes/icons/ogre_magi.png b/public/heroes/icons/ogre_magi.png new file mode 100644 index 0000000..cd5430b Binary files /dev/null and b/public/heroes/icons/ogre_magi.png differ diff --git a/public/heroes/icons/omniknight.png b/public/heroes/icons/omniknight.png new file mode 100644 index 0000000..7d60f06 Binary files /dev/null and b/public/heroes/icons/omniknight.png differ diff --git a/public/heroes/icons/oracle.png b/public/heroes/icons/oracle.png new file mode 100644 index 0000000..a6daf87 Binary files /dev/null and b/public/heroes/icons/oracle.png differ diff --git a/public/heroes/icons/pangolier.png b/public/heroes/icons/pangolier.png new file mode 100644 index 0000000..9353671 Binary files /dev/null and b/public/heroes/icons/pangolier.png differ diff --git a/public/heroes/icons/phantom_assassin.png b/public/heroes/icons/phantom_assassin.png new file mode 100644 index 0000000..80c491f Binary files /dev/null and b/public/heroes/icons/phantom_assassin.png differ diff --git a/public/heroes/icons/phantom_lancer.png b/public/heroes/icons/phantom_lancer.png new file mode 100644 index 0000000..857f609 Binary files /dev/null and b/public/heroes/icons/phantom_lancer.png differ diff --git a/public/heroes/icons/phoenix.png b/public/heroes/icons/phoenix.png new file mode 100644 index 0000000..264bf58 Binary files /dev/null and b/public/heroes/icons/phoenix.png differ diff --git a/public/heroes/icons/puck.png b/public/heroes/icons/puck.png new file mode 100644 index 0000000..cfb2f14 Binary files /dev/null and b/public/heroes/icons/puck.png differ diff --git a/public/heroes/icons/pudge.png b/public/heroes/icons/pudge.png new file mode 100644 index 0000000..1713106 Binary files /dev/null and b/public/heroes/icons/pudge.png differ diff --git a/public/heroes/icons/pugna.png b/public/heroes/icons/pugna.png new file mode 100644 index 0000000..11b4795 Binary files /dev/null and b/public/heroes/icons/pugna.png differ diff --git a/public/heroes/icons/queenofpain.png b/public/heroes/icons/queenofpain.png new file mode 100644 index 0000000..b9055da Binary files /dev/null and b/public/heroes/icons/queenofpain.png differ diff --git a/public/heroes/icons/rattletrap.png b/public/heroes/icons/rattletrap.png new file mode 100644 index 0000000..e309602 Binary files /dev/null and b/public/heroes/icons/rattletrap.png differ diff --git a/public/heroes/icons/razor.png b/public/heroes/icons/razor.png new file mode 100644 index 0000000..5baba36 Binary files /dev/null and b/public/heroes/icons/razor.png differ diff --git a/public/heroes/icons/riki.png b/public/heroes/icons/riki.png new file mode 100644 index 0000000..8264e95 Binary files /dev/null and b/public/heroes/icons/riki.png differ diff --git a/public/heroes/icons/rubick.png b/public/heroes/icons/rubick.png new file mode 100644 index 0000000..42bbf47 Binary files /dev/null and b/public/heroes/icons/rubick.png differ diff --git a/public/heroes/icons/sand_king.png b/public/heroes/icons/sand_king.png new file mode 100644 index 0000000..74700a0 Binary files /dev/null and b/public/heroes/icons/sand_king.png differ diff --git a/public/heroes/icons/shadow_demon.png b/public/heroes/icons/shadow_demon.png new file mode 100644 index 0000000..89d933c Binary files /dev/null and b/public/heroes/icons/shadow_demon.png differ diff --git a/public/heroes/icons/shadow_shaman.png b/public/heroes/icons/shadow_shaman.png new file mode 100644 index 0000000..8076bd6 Binary files /dev/null and b/public/heroes/icons/shadow_shaman.png differ diff --git a/public/heroes/icons/shredder.png b/public/heroes/icons/shredder.png new file mode 100644 index 0000000..db10502 Binary files /dev/null and b/public/heroes/icons/shredder.png differ diff --git a/public/heroes/icons/silencer.png b/public/heroes/icons/silencer.png new file mode 100644 index 0000000..87e799e Binary files /dev/null and b/public/heroes/icons/silencer.png differ diff --git a/public/heroes/icons/skeleton_king.png b/public/heroes/icons/skeleton_king.png new file mode 100644 index 0000000..9a92c76 Binary files /dev/null and b/public/heroes/icons/skeleton_king.png differ diff --git a/public/heroes/icons/skywrath_mage.png b/public/heroes/icons/skywrath_mage.png new file mode 100644 index 0000000..f8eaf5e Binary files /dev/null and b/public/heroes/icons/skywrath_mage.png differ diff --git a/public/heroes/icons/slardar.png b/public/heroes/icons/slardar.png new file mode 100644 index 0000000..292f101 Binary files /dev/null and b/public/heroes/icons/slardar.png differ diff --git a/public/heroes/icons/slark.png b/public/heroes/icons/slark.png new file mode 100644 index 0000000..12c38b0 Binary files /dev/null and b/public/heroes/icons/slark.png differ diff --git a/public/heroes/icons/snapfire.png b/public/heroes/icons/snapfire.png new file mode 100644 index 0000000..64b74fb Binary files /dev/null and b/public/heroes/icons/snapfire.png differ diff --git a/public/heroes/icons/sniper.png b/public/heroes/icons/sniper.png new file mode 100644 index 0000000..6ef94c0 Binary files /dev/null and b/public/heroes/icons/sniper.png differ diff --git a/public/heroes/icons/spectre.png b/public/heroes/icons/spectre.png new file mode 100644 index 0000000..ffc4f0a Binary files /dev/null and b/public/heroes/icons/spectre.png differ diff --git a/public/heroes/icons/spirit_breaker.png b/public/heroes/icons/spirit_breaker.png new file mode 100644 index 0000000..9b30430 Binary files /dev/null and b/public/heroes/icons/spirit_breaker.png differ diff --git a/public/heroes/icons/storm_spirit.png b/public/heroes/icons/storm_spirit.png new file mode 100644 index 0000000..1810c64 Binary files /dev/null and b/public/heroes/icons/storm_spirit.png differ diff --git a/public/heroes/icons/sven.png b/public/heroes/icons/sven.png new file mode 100644 index 0000000..5eae257 Binary files /dev/null and b/public/heroes/icons/sven.png differ diff --git a/public/heroes/icons/techies.png b/public/heroes/icons/techies.png new file mode 100644 index 0000000..b2b7a94 Binary files /dev/null and b/public/heroes/icons/techies.png differ diff --git a/public/heroes/icons/templar_assassin.png b/public/heroes/icons/templar_assassin.png new file mode 100644 index 0000000..58b3c61 Binary files /dev/null and b/public/heroes/icons/templar_assassin.png differ diff --git a/public/heroes/icons/terrorblade.png b/public/heroes/icons/terrorblade.png new file mode 100644 index 0000000..1a3fefb Binary files /dev/null and b/public/heroes/icons/terrorblade.png differ diff --git a/public/heroes/icons/tidehunter.png b/public/heroes/icons/tidehunter.png new file mode 100644 index 0000000..6e9f91e Binary files /dev/null and b/public/heroes/icons/tidehunter.png differ diff --git a/public/heroes/icons/tinker.png b/public/heroes/icons/tinker.png new file mode 100644 index 0000000..8c59742 Binary files /dev/null and b/public/heroes/icons/tinker.png differ diff --git a/public/heroes/icons/tiny.png b/public/heroes/icons/tiny.png new file mode 100644 index 0000000..fc42c6f Binary files /dev/null and b/public/heroes/icons/tiny.png differ diff --git a/public/heroes/icons/treant.png b/public/heroes/icons/treant.png new file mode 100644 index 0000000..6d036ea Binary files /dev/null and b/public/heroes/icons/treant.png differ diff --git a/public/heroes/icons/troll_warlord.png b/public/heroes/icons/troll_warlord.png new file mode 100644 index 0000000..6a92027 Binary files /dev/null and b/public/heroes/icons/troll_warlord.png differ diff --git a/public/heroes/icons/tusk.png b/public/heroes/icons/tusk.png new file mode 100644 index 0000000..bda4295 Binary files /dev/null and b/public/heroes/icons/tusk.png differ diff --git a/public/heroes/icons/undying.png b/public/heroes/icons/undying.png new file mode 100644 index 0000000..941af24 Binary files /dev/null and b/public/heroes/icons/undying.png differ diff --git a/public/heroes/icons/ursa.png b/public/heroes/icons/ursa.png new file mode 100644 index 0000000..cd134b6 Binary files /dev/null and b/public/heroes/icons/ursa.png differ diff --git a/public/heroes/icons/vengefulspirit.png b/public/heroes/icons/vengefulspirit.png new file mode 100644 index 0000000..f88c4ae Binary files /dev/null and b/public/heroes/icons/vengefulspirit.png differ diff --git a/public/heroes/icons/venomancer.png b/public/heroes/icons/venomancer.png new file mode 100644 index 0000000..ccf47f1 Binary files /dev/null and b/public/heroes/icons/venomancer.png differ diff --git a/public/heroes/icons/viper.png b/public/heroes/icons/viper.png new file mode 100644 index 0000000..93e691c Binary files /dev/null and b/public/heroes/icons/viper.png differ diff --git a/public/heroes/icons/visage.png b/public/heroes/icons/visage.png new file mode 100644 index 0000000..d3a0125 Binary files /dev/null and b/public/heroes/icons/visage.png differ diff --git a/public/heroes/icons/void_spirit.png b/public/heroes/icons/void_spirit.png new file mode 100644 index 0000000..b1def01 Binary files /dev/null and b/public/heroes/icons/void_spirit.png differ diff --git a/public/heroes/icons/warlock.png b/public/heroes/icons/warlock.png new file mode 100644 index 0000000..d771ea6 Binary files /dev/null and b/public/heroes/icons/warlock.png differ diff --git a/public/heroes/icons/weaver.png b/public/heroes/icons/weaver.png new file mode 100644 index 0000000..cbdbfe0 Binary files /dev/null and b/public/heroes/icons/weaver.png differ diff --git a/public/heroes/icons/windrunner.png b/public/heroes/icons/windrunner.png new file mode 100644 index 0000000..1b326b0 Binary files /dev/null and b/public/heroes/icons/windrunner.png differ diff --git a/public/heroes/icons/winter_wyvern.png b/public/heroes/icons/winter_wyvern.png new file mode 100644 index 0000000..237b4af Binary files /dev/null and b/public/heroes/icons/winter_wyvern.png differ diff --git a/public/heroes/icons/wisp.png b/public/heroes/icons/wisp.png new file mode 100644 index 0000000..4d4c7ad Binary files /dev/null and b/public/heroes/icons/wisp.png differ diff --git a/public/heroes/icons/witch_doctor.png b/public/heroes/icons/witch_doctor.png new file mode 100644 index 0000000..02bc32f Binary files /dev/null and b/public/heroes/icons/witch_doctor.png differ diff --git a/public/heroes/icons/zuus.png b/public/heroes/icons/zuus.png new file mode 100644 index 0000000..04aa0c1 Binary files /dev/null and b/public/heroes/icons/zuus.png differ diff --git a/public/hud.json b/public/hud.json index e593455..01eee0c 100644 --- a/public/hud.json +++ b/public/hud.json @@ -1,6 +1,6 @@ { - "name":"Lexogrine Dota2 HUD", - "version":"1.0.0", + "name":"exogrine Dota2 HUD", + "version":"1.1.0", "author":"Lexogrine", "legacy": false, "radar": true, diff --git a/public/keybinds.json b/public/keybinds.json index ef6bfe2..ebc559d 100644 --- a/public/keybinds.json +++ b/public/keybinds.json @@ -1,30 +1,14 @@ [ { - "bind":"Ctrl+B", - "action":"toggleRadar" - }, - { - "bind":"Alt+B", - "action":"radarBigger" + "bind":"Alt+D", + "action":"draft" }, { "bind":"Alt+S", - "action":"radarSmaller" + "action":"scoreboard" }, { - "bind":"Alt+T", - "action":"toggleAR" - }, - { - "bind":"Alt+C", - "action":"toggleCams" - }, - { - "bind":"Alt+M", - "action":"toggleUpcomingMatch" - }, - { - "bind":"Alt+P", - "action":"togglePlayerPreview" + "bind":"Alt+G", + "action":"game" } ] \ No newline at end of file diff --git a/public/panel.json b/public/panel.json index 0aa1428..c986ec3 100644 --- a/public/panel.json +++ b/public/panel.json @@ -1,148 +1,31 @@ [ { - "label": "Trivia", - "name":"trivia", + "label": "View", + "name":"view", "inputs": [ { "type": "text", - "name": "title", - "label": "Trivia title" - }, - { - "type": "text", - "name": "content", - "label": "Trivia content" + "name": "info_box", + "label": "Top right corner match info" }, { "type": "action", - "name": "triviaState", + "name": "viewType", "values": [ { - "name": "show", - "label": "Show trivia" + "name": "draft", + "label": "Show draft" }, { - "name": "hide", - "label": "Hide trivia" + "name": "game", + "label": "Show game" + }, + { + "name": "scoreboard", + "label": "Show scoreboard" } ] } ] - }, - { - "label": "Display settings", - "name":"display_settings", - "inputs": [ - { - "type": "text", - "name": "left_title", - "label": "Left box's title" - }, - { - "type": "text", - "name": "right_title", - "label": "Right box's title" - }, - { - "type": "text", - "name": "left_subtitle", - "label": "Left box's subtitle" - }, - { - "type": "text", - "name": "right_subtitle", - "label": "Right box's subtitle" - }, - { - "type":"image", - "name":"left_image", - "label":"Left box's image logo" - }, - { - "type":"image", - "name":"right_image", - "label":"Right box's image logo" - }, - { - "type": "action", - "name": "boxesState", - "values": [ - { - "name": "show", - "label": "Show boxes" - }, - { - "name": "hide", - "label": "Hide boxes" - } - ] - }, - { - "type": "action", - "name": "toggleRadarView", - "values": [ - { - "name": "toggler", - "label": "Toggle radar view" - } - ] - } - ] - }, - { - "label": "Player & Match overview", - "name":"preview_settings", - "inputs": [ - { - "type": "match", - "name": "match_preview", - "label": "Pick an upcoming match" - }, - { - "type": "select", - "name": "select_preview", - "label": "Mood indicator", - "values": [ - { - "name": "show", - "label": ":)" - }, - { - "name": "hide", - "label": ":(" - } - ] - }, - { - "type": "player", - "name": "player_preview", - "label": "Pick a player to preview" - }, - { - "type": "checkbox", - "name": "player_preview_toggle", - "label": "Show player preview" - }, - { - "type": "checkbox", - "name": "match_preview_toggle", - "label": "Show upcoming match" - }, - { - "type": "action", - "name": "showTournament", - "values": [ - { - "name": "show", - "label": "Show tournament" - }, - { - "name": "hide", - "label": "Hide tournament" - } - ] - } - - ] } ] \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 64a4f91..4965146 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,11 +6,28 @@ import { Dota2, DOTA2GSI, PlayerExtension } from 'dotagsi'; import { io } from "socket.io-client"; import { loadAvatarURL } from './api/avatars'; import { Match } from './api/interfaces'; +import Statistics from './HUD/GameHUD/ObservedStatistics'; +import TopSideBar from './HUD/GameHUD/TopSideBar'; +import "./HUD/GameHUD/gamehud.scss"; +import { exampleData } from './example'; const DOTA2 = new DOTA2GSI(); const socket = io(isDev ? `localhost:${port}` : '/'); +const isTest = false; + +if (isTest) { + setTimeout(() => { + DOTA2.digest(exampleData); + }, 100); + setTimeout(() => { + DOTA2.digest(exampleData) + }, 2000) +} +let i = 0; socket.on('update', (data: any) => { + if (!i) console.log(data); + i = 1; DOTA2.digest(data); }); @@ -115,6 +132,7 @@ class App extends React.Component { + if (!this.state.game || this.state.steamids.length) this.verifyPlayers(data); this.setState({ game: data }); }) socket.on('match', () => { @@ -133,20 +151,24 @@ class App extends React.Component veto.mapName === mapName)[0]; - if (current && current.reverseSide) { - isReversed = true; + let current = match.vetos.find(veto => !veto.mapEnd); + console.log(DOTA2.last && DOTA2.last.map.win_team) + if(DOTA2.last && DOTA2.last.map.win_team !== 'none'){ + const finished = match.vetos.filter(veto => veto.mapEnd); + const newCurrent = finished[finished.length - 1]; + if(newCurrent){ + current = newCurrent; } - this.setState({ checked: true }); } + if (current && current.reverseSide) { + isReversed = true; + } + this.setState({ checked: true }); + if (match.left.id) { api.teams.getOne(match.left.id).then(left => { const gsiTeamData = { id: left._id, name: left.name, country: left.country, logo: left.logo, map_score: match.left.wins, extra: left.extra }; - if (!isReversed) { DOTA2.teams.radiant = gsiTeamData; } @@ -171,7 +193,7 @@ class App extends React.Component ); diff --git a/src/HUD/GameHUD/Game.tsx b/src/HUD/GameHUD/Game.tsx new file mode 100644 index 0000000..713f18e --- /dev/null +++ b/src/HUD/GameHUD/Game.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi'; +import { apiUrl } from '../../api/api'; + +const ObservedPlayer = ({ players, player, team, show}: { show: boolean, player: Player | null, players: Player[], team: Team | null }) => { + const getPlayerById = (id: number) => { + return players.find(player => player.id === id); + } + return <> + { player ?
+
+
+
+
+ {team && team.id ? : null} +
+
+
{player.name} { player.kills ?
+ { + player.kill_list.map(killEntry => { + const victim = getPlayerById(killEntry.victimid); + if(!victim || !victim.hero || !victim.hero.name) return null; + + return ( +
X{killEntry.amount}
+ ); + }) + }
: null} +
+ +
+
+ {player.avatar ? : null} +
+
: null} + + +} + +export default ObservedPlayer; \ No newline at end of file diff --git a/src/HUD/GameHUD/ObservedStatistics.tsx b/src/HUD/GameHUD/ObservedStatistics.tsx new file mode 100644 index 0000000..fc39efa --- /dev/null +++ b/src/HUD/GameHUD/ObservedStatistics.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi'; +import TopSideBar from './TopSideBar'; + +const Statistics = ({ player, type, teamId, show}: { player: Player | null, type: Faction, teamId: string, show: boolean}) => { + if (!player) { + + return + + + } + const { gpm, xpm, kills, deaths, assists } = player; + return +
+ GPM {gpm} / XPM {xpm} +
+
+ {player.last_hits} / {player.denies} +
+
+ KDA {kills} / {deaths} / {assists} +
+
+} + +export default Statistics; \ No newline at end of file diff --git a/src/HUD/GameHUD/TopSideBar.tsx b/src/HUD/GameHUD/TopSideBar.tsx new file mode 100644 index 0000000..eaadd77 --- /dev/null +++ b/src/HUD/GameHUD/TopSideBar.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi'; +import { apiUrl } from '../../api/api'; + +const TopSideBar = ({ children, type, teamId, show }: { children: any, type: Faction, teamId: string, show: boolean }) => { + return
+ {type === 'radiant' ? ( +
+
+ +
+ +
+ ) : null} + {children} + {type === 'dire' ? ( +
+
+ +
+ +
+ ) : null} +
+} + +export default TopSideBar; \ No newline at end of file diff --git a/src/HUD/GameHUD/commercial.png b/src/HUD/GameHUD/commercial.png new file mode 100644 index 0000000..26cdd4c Binary files /dev/null and b/src/HUD/GameHUD/commercial.png differ diff --git a/src/HUD/GameHUD/gamehud.scss b/src/HUD/GameHUD/gamehud.scss new file mode 100644 index 0000000..216b15a --- /dev/null +++ b/src/HUD/GameHUD/gamehud.scss @@ -0,0 +1,211 @@ +.top_side_bar { + width: 455px; + height: 55px; + background: rgba(19, 0, 23, 0.9); + display: flex; + justify-content: space-evenly; + align-items: center; + color: white; + position: absolute; + font-size: 16px; + top:0; + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } + .attack { + background-repeat: no-repeat; + background-position: 0 2px; + background-image: url('./../Scoreboard/sword.png'); + padding-left:23px; + } + + &.right { + right: 0; + .logo_and_type { + right: unset; + left: -92px; + + img { + left: unset; + right: 6px; + } + + .type_color { + left:0; + right:unset; + } + } + } + + .logo_and_type { + position: absolute; + right:-92px; + width: 92px; + height: 55px; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + background: rgba(19, 0, 23, 0.9); + img { + position: relative; + left: 6px; + max-width: 75px; + } + .type_color{ + width: 24px; + height: 100%; + position: absolute; + z-index:999; + top:0; + right:0; + &.radiant { + background-color: #16349E; + } + &.dire { + background-color: #BD1313; + } + } + } +} +.commercial { + width: 379px; + height: 215px; + position: fixed; + bottom: 0; + right: 172px; + transition: opacity 1s; + opacity:1; + display: flex; + align-items: flex-end; + justify-content: center; + .commercial-container { + width: 100%; + height: 153px; + display: flex; + align-items: center; + justify-content: center; + } + img { + position: relative; + left: 10px; + max-width:70%; + max-height: 120px; + + + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } + } + &.hide { + opacity: 0; + } +} +#commercial { + position: fixed; + bottom: 0; + right: 172px; + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } +} +body { +} +.player_container { + display: flex; + flex-direction: column; + position:fixed; + align-items: center; + bottom:0; + left:232px; + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } + .player_picture { + width: 260px; + height: 170px; + display: flex; + + justify-content: center; + background-color: rgba(1, 3, 20, 1); + align-items: flex-end; + + img { + max-height: 100%; + max-width: 100%; + } + } + .player_info { + height:37px; + width: 100%; + display:flex; + align-items: flex-end; + background-color: rgba(19, 0, 23, 0.9); + .team_bar { + width: 15px; + height: 100%; + &.radiant { + + background-color: #16349E; + + } + &.dire { + + background-color: #BD1313; + } + } + .team_box{ + width: 60px; + height: 100%; + z-index:2; + display: flex; + } + .team_logo { + display:flex; + align-items: center; + justify-content: center; + img { + max-width:30px; + } + } + .username { + color: white; + font-size: 16px; + font-weight: 700; + flex:1; + height: 100%; + display:flex; + padding-left:20px; + text-transform: uppercase; + align-items: center; + position: relative; + left: -8px; + .player_kills { + margin-left: auto; + margin-right: 20px; + font-weight: 500; + display: flex; + height: 100%; + font-size: 14px; + + .player_kill { + background-repeat: no-repeat; + background-position: top 2px center; + width: 20px; + background-size: 18px; + display: flex; + justify-content: center; + align-items: flex-end; + } + } + } + } +} diff --git a/src/HUD/GameHUD/kill_icon.png b/src/HUD/GameHUD/kill_icon.png new file mode 100644 index 0000000..41da6bd Binary files /dev/null and b/src/HUD/GameHUD/kill_icon.png differ diff --git a/src/HUD/GameHUD/observed.scss b/src/HUD/GameHUD/observed.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/HUD/Layout/Layout.tsx b/src/HUD/Layout/Layout.tsx index 9fe8b4c..6432b84 100644 --- a/src/HUD/Layout/Layout.tsx +++ b/src/HUD/Layout/Layout.tsx @@ -3,35 +3,151 @@ import React from "react"; import { Match } from "../../api/interfaces"; import MatchBar from "../MatchBar/MatchBar"; import SeriesBox from "../MatchBar/SeriesBox"; +import TeamPicker from "../Picker/Picker"; import Observed from "./../Players/Observed"; +import "./../Picker/player.scss"; +import TeamInfo from "../Picker/TeamInfo"; +import Statistics from "../GameHUD/ObservedStatistics"; +import TopSideBar from "../GameHUD/TopSideBar"; +import Scoreboard, { stringToClock } from "../Scoreboard/Scoreboard"; +import TwitchIcon from "./../Scoreboard/twitch.png"; +import FacebookIcon from './../Scoreboard/facebook.png'; +import TwitterIcon from "./../Scoreboard/twitter.png"; +import InstragramIcon from './../Scoreboard/instagram.png'; +import ObservedPlayer from "../GameHUD/Game"; +import { actions, configs } from "../../App"; + +const icons = { + twitch: TwitchIcon, + facebook: FacebookIcon, + instagram: InstragramIcon, + twitter: TwitterIcon +} as any; interface Props { game: Dota2, match: Match | null } -export default class Layout extends React.Component { - - - componentDidMount() { +interface State { + view: 'draft' | 'game' | 'scoreboard' | null; + text: string; +} +export default class Layout extends React.Component { + constructor(props: Props) { + super(props); + this.state = { + view: null, + text: '', + } + } + componentDidMount() { + actions.on('viewType', (data: any) => { + this.setState({ view: data }); + }) + const handleViewType = (type: string) => { + actions.on(type, () => { + this.setState({ view: type === this.state.view ? null : type as any }); + }) + } + handleViewType('scoreboard'); + handleViewType('game'); + handleViewType('draft'); + const configHandler = (data: any) => { + if (!data || !data.view) return; + + this.setState({ + text: data.view.info_box, + }); + + } + if (configs.data) { + configHandler(configs.data); + } + configs.onChange(configHandler) } - - render() { const { game, match } = this.props; + const state = game.map.game_state; + let view = this.state.view; + + if (!view) { + switch (state) { + case "DOTA_GAMERULES_STATE_HERO_SELECTION": + case "DOTA_GAMERULES_STATE_STRATEGY_TIME": + case "DOTA_GAMERULES_STATE_TEAM_SHOWCASE": + case "DOTA_GAMERULES_STATE_PRE_GAME": + view = 'draft'; + break; + case "DOTA_GAMERULES_STATE_GAME_IN_PROGRESS": + view = "game"; + break; + case "DOTA_GAMERULES_STATE_POST_GAME": + view = "scoreboard"; + break; + default: + break; + } + } + + //(this.state.sponsor) + /// DOTA_GAMERULES_STATE_HERO_SELECTION + let activeTeamBonusTime = 0; + if(game.draft.activeteam !== undefined){ + if(game.draft.activeteam === 2 && game.draft.radiant){ + activeTeamBonusTime = game.draft.radiant.bonus_time ; + } else if (game.draft.activeteam === 3 && game.draft.dire){ + activeTeamBonusTime = game.draft.dire.bonus_time; + } + } return ( -
- - - + <> +
+
+
+ +
+
+ {(match && match.matchType) || 'BO2'} +
+
+
+
+
+
+ +
+
+ player.team_name === 'radiant')} /> -
+
+
{ game.draft.activeteam_time_remaining ? 'Pick time' : 'Bonus time'}
+
{stringToClock(game.draft.activeteam_time_remaining || activeTeamBonusTime)}
+
+ player.team_name === 'dire')} /> +
+
+ + +
+ + + {this.state.text} + + + + ); } } diff --git a/src/HUD/MatchBar/MatchBar.tsx b/src/HUD/MatchBar/MatchBar.tsx index 75759b5..56c1003 100644 --- a/src/HUD/MatchBar/MatchBar.tsx +++ b/src/HUD/MatchBar/MatchBar.tsx @@ -32,8 +32,8 @@ export default class TeamBox extends React.Component { const right = map.dire; const bo = (match && Number(match.matchType.substr(-1))) || 0; - const leftScore = players.filter(player => player.team_name === 'radiant').map(player => player.kills).reduce((a, b) => a + b, 0); - const rightScore = players.filter(player => player.team_name === 'dire').map(player => player.kills).reduce((a, b) => a + b, 0); + const leftScore = players.filter(player => player.team_name === 'dire').map(player => player.deaths).reduce((a, b) => a + b, 0); + const rightScore = players.filter(player => player.team_name === 'radiant').map(player => player.deaths).reduce((a, b) => a + b, 0); return ( <> diff --git a/src/HUD/Picker/Pick.tsx b/src/HUD/Picker/Pick.tsx new file mode 100644 index 0000000..b2670a5 --- /dev/null +++ b/src/HUD/Picker/Pick.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { Draft, DraftEntry, Faction, TeamDraft } from 'dotagsi'; +import Snow from "./snowflake.png"; +const PlayerPick = ({ entry, type, active }: { entry: DraftEntry, type: Faction, active: boolean }) => { + const order = entry.order + 1; + let lastPart = 'th'; + if (order === 1) { + lastPart = 'st'; + } else if (order === 2) { + lastPart = 'nd'; + } else if (order === 3) { + lastPart = 'rd'; + } + let text = `${order}${lastPart} PICK`; + if (!entry.class) { + text = ''; + } + if (active) { + text = 'PICKING...'; + } + return
+
+
+
+ {entry.class ? : null} +
+
+ {text} +
+
+} + +export const PlayerBan = ({ entry, type, active }: { entry: DraftEntry, type: Faction, active: boolean }) => { + const order = entry.order + 1; + + if (!entry.class) { + + return
+
+
+
+ } + + return
+
+ +
+
+} + +export default PlayerPick; \ No newline at end of file diff --git a/src/HUD/Picker/Picker.tsx b/src/HUD/Picker/Picker.tsx new file mode 100644 index 0000000..8383a62 --- /dev/null +++ b/src/HUD/Picker/Picker.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import { Draft, Faction, TeamDraft } from 'dotagsi'; +import PlayerPick, { PlayerBan } from './Pick'; + +const TeamPicker = ({ draft, type, active }: { draft?: TeamDraft, type: Faction, active: boolean }) => { + if (!draft) { + return
+
+ +
+
+ +
+
+ } + const picks = draft.picks.filter(pick => pick.type === 'pick').sort((a, b) => a.order - b.order); + const smallestNotPickedOrder = Math.min(...picks.filter(entry => !entry.class).map(entry => entry.order)); + return
+
+ { + picks.map(pick => ) + } +
+
+ +
+
+} + +export const TeamBaner = ({ draft, type, active }: { draft?: TeamDraft, type: Faction, active: boolean }) => { + if (!draft) { + + return
+
+
+
+ } + const picks = draft.picks.filter(pick => pick.type === 'ban').sort((a, b) => a.order - b.order); + const smallestNotPickedOrder = Math.min(...picks.filter(entry => !entry.class).map(entry => entry.order)); + return
+
+ { + picks.map(pick => ) + } +
+
+} + +export default TeamPicker; \ No newline at end of file diff --git a/src/HUD/Picker/TeamInfo.tsx b/src/HUD/Picker/TeamInfo.tsx new file mode 100644 index 0000000..b992f74 --- /dev/null +++ b/src/HUD/Picker/TeamInfo.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { Draft, Team, Faction, Player, TeamDraft } from 'dotagsi'; +import { TeamBaner } from './Picker'; + +const TeamInfo = ({ draft, type, players, team }: { draft: Draft, type: Faction, players: Player[], team: Team, }) => { + return
+
+ {team.map_score} +
+
+
+
+ {team.name} +
+ +
+
+ {players.map(player => player.name).join(' / ')} +
+
+
+} + +export default TeamInfo; \ No newline at end of file diff --git a/src/HUD/Picker/Vector.png b/src/HUD/Picker/Vector.png new file mode 100644 index 0000000..1cad317 Binary files /dev/null and b/src/HUD/Picker/Vector.png differ diff --git a/src/HUD/Picker/activePick.png b/src/HUD/Picker/activePick.png new file mode 100644 index 0000000..823d70d Binary files /dev/null and b/src/HUD/Picker/activePick.png differ diff --git a/src/HUD/Picker/leftPick.png b/src/HUD/Picker/leftPick.png new file mode 100644 index 0000000..80b5659 Binary files /dev/null and b/src/HUD/Picker/leftPick.png differ diff --git a/src/HUD/Picker/leftPickActive.png b/src/HUD/Picker/leftPickActive.png new file mode 100644 index 0000000..0786ef8 Binary files /dev/null and b/src/HUD/Picker/leftPickActive.png differ diff --git a/src/HUD/Picker/nonActivePick.png b/src/HUD/Picker/nonActivePick.png new file mode 100644 index 0000000..22170a4 Binary files /dev/null and b/src/HUD/Picker/nonActivePick.png differ diff --git a/src/HUD/Picker/player.scss b/src/HUD/Picker/player.scss new file mode 100644 index 0000000..a5ba1f0 --- /dev/null +++ b/src/HUD/Picker/player.scss @@ -0,0 +1,233 @@ +.background { + position: absolute; + background-color: rgba(27, 30, 69, 0.9); + width: 100%; + height: 100%; + + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } +} +.draft-screen-container { + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } +} +.draft-container { + display: flex; + position: fixed; + margin-left:50%; + transform: translateX(-50%); + bottom: 104px; +} + +.tournament_info { + width: 139px; + height: 145px; + display: flex; + flex-direction: column; + justify-content: space-between; + .bo { + height: 33px; + width: 100%; + background-color: rgba(19, 0, 23, 0.9); + color: white; + display: flex; + align-items: center; + font-weight: 700; + justify-content: center; + text-transform: uppercase; + } + .picker_and_logo { + display: flex; + flex: 1; + background-color: rgba(19, 0, 23, 0.9); + background-repeat: no-repeat; + background-position: center; + justify-content: space-between; + background-size: cover; + .side_pick{ + display: flex; + flex: 1; + align-items: center; + justify-content: center; + background-repeat: no-repeat; + background-position: center; + max-width: 45px; + + &.left { + background-image: url('./leftPick.png'); + &.active { + background-image: url('./leftPickActive.png'); + } + } + &.right { + background-image: url('./rightPick.png'); + &.active { + background-image: url('./rightPickActive.png'); + } + } + } + } +} +.players_draft { + display: flex; + + &.radiant { + flex-direction: row-reverse; + } +} +.players_draft_ban { + display: flex; + &.radiant { + flex-direction: row-reverse; + } +} +.team_draft_ban { + position: absolute; + &.radiant { + right: 0; + } + &.dire { + left: 0; + } + top: 4px; +} +.player_ban { + margin: 0 2px; + .player_preview { + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + width: 36px; + height: 36px; + img { + height: 36px; + } + } +} +.player_draft { + width:123px; + height:145px; + display:flex; + flex-direction: column; + margin:0 1.5px; + &.dire { + .draft_status { + background-color: #BD1313; + } + } + &.radiant { + .draft_status { + background-color: #16349E; + } + } + .player_preview { + flex: 1; + background-color:rgba(19, 0, 23, 0.9); + display: flex; + background-position: center; + background-repeat: no-repeat; + .background-imgs { + flex:1; + opacity:0.3; + background-position: center; + background-repeat: no-repeat; + } + } + .draft_status { + width:100%; + height:21px; + color: white; + text-align: center; + font-weight: 700; + font-size: 15px; + &.active { + + } + &.hidden { + height: 7px; + } + } +} +.team_info_container { + display: flex; + height: 76px; + width: 1390px; + background-color: rgba(19, 0, 23, 0.9); + color: white; + position: fixed; + margin-left:50%; + transform: translateX(-50%); + bottom: 24px; + .timer { + width: 139px; + height: 100%; + background-color: #0E0018; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + .label { + font-size: 15px; + text-transform: uppercase; + opacity: 0.7; + font-weight: 700; + letter-spacing: 0.1em; + } + .timer-time { + font-weight: 700; + + font-size: 22px; + } + } + .team_info { + flex:1; + display: flex; + position: relative; + .team_info_score { + width: 60px; + display:flex; + align-items: center; + justify-content: center; + font-size: 38px; + font-weight: 700; + } + .team_squad { + display: flex; + flex-direction: column; + .top_bar { + font-size: 24px; + } + .bottom_bar { + font-size: 15px; + } + > div { + flex: 1; + display: flex; + align-items: center; + } + } + &.radiant { + .team_info_score { + background-color: #16349E; + margin-right: 8px; + } + } + &.dire { + flex-direction: row-reverse; + .team_info_score { + background-color: #BD1313; + margin-left: 8px; + } + .team_squad { + align-items: flex-end; + } + } + } +} \ No newline at end of file diff --git a/src/HUD/Picker/rightPick.png b/src/HUD/Picker/rightPick.png new file mode 100644 index 0000000..8c7fa45 Binary files /dev/null and b/src/HUD/Picker/rightPick.png differ diff --git a/src/HUD/Picker/rightPickActive.png b/src/HUD/Picker/rightPickActive.png new file mode 100644 index 0000000..cfa3837 Binary files /dev/null and b/src/HUD/Picker/rightPickActive.png differ diff --git a/src/HUD/Picker/snowflake.png b/src/HUD/Picker/snowflake.png new file mode 100644 index 0000000..546234d Binary files /dev/null and b/src/HUD/Picker/snowflake.png differ diff --git a/src/HUD/Picker/tournament.png b/src/HUD/Picker/tournament.png new file mode 100644 index 0000000..b0f9e31 Binary files /dev/null and b/src/HUD/Picker/tournament.png differ diff --git a/src/HUD/Scoreboard/Center.png b/src/HUD/Scoreboard/Center.png new file mode 100644 index 0000000..e342a68 Binary files /dev/null and b/src/HUD/Scoreboard/Center.png differ diff --git a/src/HUD/Scoreboard/Center1.png b/src/HUD/Scoreboard/Center1.png new file mode 100644 index 0000000..3a4075c Binary files /dev/null and b/src/HUD/Scoreboard/Center1.png differ diff --git a/src/HUD/Scoreboard/Rectangle 25.png b/src/HUD/Scoreboard/Rectangle 25.png new file mode 100644 index 0000000..22df3f8 Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 25.png differ diff --git a/src/HUD/Scoreboard/Rectangle 41.png b/src/HUD/Scoreboard/Rectangle 41.png new file mode 100644 index 0000000..ebfe5b5 Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 41.png differ diff --git a/src/HUD/Scoreboard/Rectangle 48.png b/src/HUD/Scoreboard/Rectangle 48.png new file mode 100644 index 0000000..18723c8 Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 48.png differ diff --git a/src/HUD/Scoreboard/Rectangle 49.png b/src/HUD/Scoreboard/Rectangle 49.png new file mode 100644 index 0000000..1b2031e Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 49.png differ diff --git a/src/HUD/Scoreboard/Rectangle 50.png b/src/HUD/Scoreboard/Rectangle 50.png new file mode 100644 index 0000000..e7b91d8 Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 50.png differ diff --git a/src/HUD/Scoreboard/Rectangle 80.png b/src/HUD/Scoreboard/Rectangle 80.png new file mode 100644 index 0000000..ec0b2a8 Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 80.png differ diff --git a/src/HUD/Scoreboard/Rectangle 81.png b/src/HUD/Scoreboard/Rectangle 81.png new file mode 100644 index 0000000..fcf3562 Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 81.png differ diff --git a/src/HUD/Scoreboard/Rectangle 82.png b/src/HUD/Scoreboard/Rectangle 82.png new file mode 100644 index 0000000..ce1c84f Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 82.png differ diff --git a/src/HUD/Scoreboard/Rectangle 83.png b/src/HUD/Scoreboard/Rectangle 83.png new file mode 100644 index 0000000..9f9bd4e Binary files /dev/null and b/src/HUD/Scoreboard/Rectangle 83.png differ diff --git a/src/HUD/Scoreboard/Scoreboard.tsx b/src/HUD/Scoreboard/Scoreboard.tsx new file mode 100644 index 0000000..c6145f8 --- /dev/null +++ b/src/HUD/Scoreboard/Scoreboard.tsx @@ -0,0 +1,110 @@ +import React from 'react'; +import { Draft, Team, Faction, Player, TeamDraft, Map } from 'dotagsi'; +import RadiantBorder from './radiantBorder.png'; +import DireBorder from './direBorder.png'; +import "./scoreboard.scss"; +import { Match } from '../../api/interfaces'; +import { apiUrl } from '../../api/api'; +export function stringToClock(time: string | number, pad = true) { + if (typeof time === "string") { + time = parseFloat(time); + } + const countdown = Math.abs(Math.ceil(time)); + const minutes = Math.floor(countdown / 60); + const seconds = countdown - minutes * 60; + if (pad && seconds < 10) { + return `${minutes}:0${seconds}`; + } + return `${minutes}:${seconds}`; +} +const ScoreboardPlayer = ({ player }: { player: Player }) => { + const neutralItem = player.items.find(item => item.type === 'neutral'); + return
+
+
+ {player.name} +
+
+ + { player.hero && player.hero.name ? : null} +
+
{player.hero && player.hero.level || 0}
+
+
+ {player.kills} / {player.deaths} / {player.assists} + +
+
+ {player.net_worth} NET WORTH +
+
+ {player.hero_damage} +
+
+ {player.gpm} GPM +
+
+ {player.xpm} XPM +
+
+ { + player.items.filter(item => item.type === "slot" && item.id < 6).map(item =>
{item.name !== "empty" ? : null}
) + } +
+ { neutralItem ?
+ {neutralItem.name !== "empty" ? : null} +
: null} +
+} + +export { ScoreboardPlayer }; + +const Scoreboard = ({ map, players, match, show }: { players: Player[], match: Match | null, map: Map, show: boolean }) => { + const leftScore = players.filter(player => player.team_name === 'dire').map(player => player.deaths).reduce((a, b) => a + b, 0); + const rightScore = players.filter(player => player.team_name === 'radiant').map(player => player.deaths).reduce((a, b) => a + b, 0); + return <> +
+
+ {map.radiant.id ? : null} +
+ {map.radiant.name} +
+
+ {map.radiant.map_score || 0} +
+
+
+ {stringToClock(map.clock_time)} +
+
+ {leftScore} - {rightScore} | {match && match.matchType} +
+
+
+ {map.dire.map_score || 0} +
+
+ {map.dire.name} +
+ {map.dire.id ? : null} +
+
+
+
+ {players.filter(player => player.team_name === 'radiant').map(player => )} +
+
+ {players.filter(player => player.team_name === 'dire').map(player => )} +
+
+ +} + +export default Scoreboard; \ No newline at end of file diff --git a/src/HUD/Scoreboard/Vector-1.png b/src/HUD/Scoreboard/Vector-1.png new file mode 100644 index 0000000..f2c69a3 Binary files /dev/null and b/src/HUD/Scoreboard/Vector-1.png differ diff --git a/src/HUD/Scoreboard/Vector.png b/src/HUD/Scoreboard/Vector.png new file mode 100644 index 0000000..7066024 Binary files /dev/null and b/src/HUD/Scoreboard/Vector.png differ diff --git a/src/HUD/Scoreboard/direBorder.png b/src/HUD/Scoreboard/direBorder.png new file mode 100644 index 0000000..bc96e29 Binary files /dev/null and b/src/HUD/Scoreboard/direBorder.png differ diff --git a/src/HUD/Scoreboard/direLine.png b/src/HUD/Scoreboard/direLine.png new file mode 100644 index 0000000..87824cc Binary files /dev/null and b/src/HUD/Scoreboard/direLine.png differ diff --git a/src/HUD/Scoreboard/facebook.png b/src/HUD/Scoreboard/facebook.png new file mode 100644 index 0000000..4f68be7 Binary files /dev/null and b/src/HUD/Scoreboard/facebook.png differ diff --git a/src/HUD/Scoreboard/header_bg.png b/src/HUD/Scoreboard/header_bg.png new file mode 100644 index 0000000..0d26785 Binary files /dev/null and b/src/HUD/Scoreboard/header_bg.png differ diff --git a/src/HUD/Scoreboard/hits.png b/src/HUD/Scoreboard/hits.png new file mode 100644 index 0000000..b6aca5a Binary files /dev/null and b/src/HUD/Scoreboard/hits.png differ diff --git a/src/HUD/Scoreboard/image 10.png b/src/HUD/Scoreboard/image 10.png new file mode 100644 index 0000000..94354f4 Binary files /dev/null and b/src/HUD/Scoreboard/image 10.png differ diff --git a/src/HUD/Scoreboard/instagram.png b/src/HUD/Scoreboard/instagram.png new file mode 100644 index 0000000..ca40657 Binary files /dev/null and b/src/HUD/Scoreboard/instagram.png differ diff --git a/src/HUD/Scoreboard/money.png b/src/HUD/Scoreboard/money.png new file mode 100644 index 0000000..d7557e7 Binary files /dev/null and b/src/HUD/Scoreboard/money.png differ diff --git a/src/HUD/Scoreboard/radiantBorder.png b/src/HUD/Scoreboard/radiantBorder.png new file mode 100644 index 0000000..f6270f8 Binary files /dev/null and b/src/HUD/Scoreboard/radiantBorder.png differ diff --git a/src/HUD/Scoreboard/radiantLine.png b/src/HUD/Scoreboard/radiantLine.png new file mode 100644 index 0000000..4aa5a77 Binary files /dev/null and b/src/HUD/Scoreboard/radiantLine.png differ diff --git a/src/HUD/Scoreboard/rec.png b/src/HUD/Scoreboard/rec.png new file mode 100644 index 0000000..89ef0dd Binary files /dev/null and b/src/HUD/Scoreboard/rec.png differ diff --git a/src/HUD/Scoreboard/rectangle.png b/src/HUD/Scoreboard/rectangle.png new file mode 100644 index 0000000..97036cd Binary files /dev/null and b/src/HUD/Scoreboard/rectangle.png differ diff --git a/src/HUD/Scoreboard/scoreboard.scss b/src/HUD/Scoreboard/scoreboard.scss new file mode 100644 index 0000000..86ca1dc --- /dev/null +++ b/src/HUD/Scoreboard/scoreboard.scss @@ -0,0 +1,222 @@ +.player_scoreboard{ + width:165px; + display: flex; + flex-direction: column; + color: white; + margin: 0 7.5px; + .player_name { + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + height: 38px; + text-transform: uppercase; + } + .player_picture { + height: 145px; + width: 145px; + position: relative; + display: flex; + justify-content: center; + background:red; + .level_container { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + bottom: -66px; + img { + opacity: 0; + } + .level_value { + position: absolute; + font-size: 20px; + top: -90px; + height: 50px; + width: 50px; + display: flex; + align-items: center; + justify-content: center; + border-radius:50px; + font-weight: 700; + background-color: rgba(19, 0, 23, 0.9); + } + } + } + .main_panel { + width: 100%; + height: 250px; + margin-bottom: 5px; + background-color: rgba(19, 0, 23, 0.9); + display: flex; + flex-direction: column; + align-items: center; + .kda { + position: relative; + top: 35px; + } + } + .panel { + width: 100%; + height: 38px; + background-color: rgba(19, 0, 23, 0.9); + margin-bottom:5px; + display: flex; + align-items: center; + justify-content: center; + background-repeat: no-repeat; + } + .skills { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + .item-slot { + display: flex; + align-items: center; + justify-content: center; + background: rgba(19, 0, 23, 0.9); + width: 80px; + height: 57px; + box-shadow: 0px 4px 20px #070C36; + margin-bottom: 5px; + } + } +} +.neutral-item { + + width: 78px; + clip-path: polygon(50% 0, calc(50% + 28.5px) 50%, 50% 100%, calc(50% - 28.5px) 50%); + height: 57px; + + margin: auto; + position: relative; + top: -33px; +} +.players_scoreboard { + display: flex; + position: fixed; + top: 243px; + width: 1870px; + justify-content: space-between; + position: fixed; + margin-left: 50%; + transform: translateX(-50%); + + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } + > div { + display: flex; + } + +} +strong.ad { + text-transform: uppercase; + width: 200px; + img { + max-width: 34px;; + } + transition: opacity 1s; + opacity:1; + &.hide { + opacity: 0; + } +} +.top_board { + position: fixed; + align-items: center; + margin-left: 50%; + transform: translateX(-50%); + top: 46px; + width: 916px; + height: 67px; + background-color: #130017; + color: white; + display: flex; + justify-content: center; + font-size: 31px; + transition: opacity 1s; + opacity: 1; + text-transform: uppercase; + &.hide { + opacity: 0; + } + .score_info { + display: flex; + color: white; + .score_container { + height: 84px; + margin-bottom: 6px; + color: white; + display: flex; + align-items: center; + justify-content: center; + font-weight: 700; + font-size: 35px; + position: relative; + width: 71px; + margin: 0 10px; + &.dire { + background-color: #BD1313; + } + &.radiant { + background-color: #16349E; + } + } + .match_info { + height: 67px; + align-items: center; + justify-content: center; + flex-direction: column; + font-weight: 700; + text-shadow: 0px 0px 7px rgba(1, 3, 20, 0.2); + + .match_score { + font-size: 15px; + letter-spacing: 1px; + width: 156px; + background-color: rgba(19, 0, 23, 0.9); + height: 28px; + display: flex; + align-items: center; + justify-content: center; + text-transform: uppercase; + position: absolute; + bottom: -48px; + } + .match_time { + font-size: 40px; + background: #130017; + width: 156px; + display: flex; + align-items: center; + justify-content: center; + height:84px; + position: relative; + letter-spacing: 2px; + align-self: center; + } + } + } + .team_logo { + &:first-child { + margin-right: auto; + } + &:last-child { + margin-left:auto; + } + height: 100%; + width: 156px; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; + img { + max-width: 100px; + max-height: 100px; + } + } +} \ No newline at end of file diff --git a/src/HUD/Scoreboard/sword.png b/src/HUD/Scoreboard/sword.png new file mode 100644 index 0000000..167fc22 Binary files /dev/null and b/src/HUD/Scoreboard/sword.png differ diff --git a/src/HUD/Scoreboard/timer.png b/src/HUD/Scoreboard/timer.png new file mode 100644 index 0000000..eab851e Binary files /dev/null and b/src/HUD/Scoreboard/timer.png differ diff --git a/src/HUD/Scoreboard/twitch.png b/src/HUD/Scoreboard/twitch.png new file mode 100644 index 0000000..c80e531 Binary files /dev/null and b/src/HUD/Scoreboard/twitch.png differ diff --git a/src/HUD/Scoreboard/twitter.png b/src/HUD/Scoreboard/twitter.png new file mode 100644 index 0000000..4e72f8c Binary files /dev/null and b/src/HUD/Scoreboard/twitter.png differ diff --git a/src/HUD/image.png b/src/HUD/image.png new file mode 100644 index 0000000..1609f3a Binary files /dev/null and b/src/HUD/image.png differ diff --git a/src/api/interfaces.ts b/src/api/interfaces.ts index a0c1c62..5f9e6d4 100644 --- a/src/api/interfaces.ts +++ b/src/api/interfaces.ts @@ -69,17 +69,12 @@ export interface PlayerRoundData { } export interface Veto { - teamId: string; - mapName: string; - side: "CT" | "T" | "NO"; - type: "ban" | "pick" | "decider"; - reverseSide?: boolean; - rounds?: RoundData[], - score?: { - [key: string]: number; - }; - winner?: string; - mapEnd: boolean; + mapEnd: boolean; + winner?: string; + score?: { + [key: string]: number; + }; + reverseSide?: boolean; } export interface Match { diff --git a/src/example.ts b/src/example.ts new file mode 100644 index 0000000..22455be --- /dev/null +++ b/src/example.ts @@ -0,0 +1,2592 @@ +import { Dota2Raw } from "dotagsi"; + +export const exampleData = { + "provider": { + "name": "Dota 2", + "appid": 570, + "version": 47, + "timestamp": 1628270293 + }, + "map": { + "name": "start", + "matchid": "6081890096", + "game_time": 2097, + "clock_time": 1162, + "daytime": false, + "nightstalker_night": false, + "game_state": "DOTA_GAMERULES_STATE_GAME_IN_PROGRESS", + "paused": false, + "win_team": "none", + "customgamename": "", + "radiant_ward_purchase_cooldown": 0, + "dire_ward_purchase_cooldown": 98, + "roshan_state": "respawn_base", + "roshan_state_end_seconds": 410, + "radiant_win_chance": 44 + }, + "buildings": { + "radiant": { + "dota_goodguys_tower1_top": { + "health": 997, + "max_health": 1800 + }, + "dota_goodguys_tower2_top": { + "health": 2500, + "max_health": 2500 + }, + "dota_goodguys_tower3_top": { + "health": 2500, + "max_health": 2500 + }, + "dota_goodguys_tower1_mid": { + "health": 241, + "max_health": 1800 + }, + "dota_goodguys_tower2_mid": { + "health": 2500, + "max_health": 2500 + }, + "dota_goodguys_tower3_mid": { + "health": 2500, + "max_health": 2500 + }, + "dota_goodguys_tower2_bot": { + "health": 1804, + "max_health": 2500 + }, + "dota_goodguys_tower3_bot": { + "health": 2500, + "max_health": 2500 + }, + "dota_goodguys_tower4_top": { + "health": 2600, + "max_health": 2600 + }, + "dota_goodguys_tower4_bot": { + "health": 2600, + "max_health": 2600 + }, + "good_rax_melee_top": { + "health": 2200, + "max_health": 2200 + }, + "good_rax_range_top": { + "health": 1300, + "max_health": 1300 + }, + "good_rax_melee_mid": { + "health": 2200, + "max_health": 2200 + }, + "good_rax_range_mid": { + "health": 1300, + "max_health": 1300 + }, + "good_rax_melee_bot": { + "health": 2200, + "max_health": 2200 + }, + "good_rax_range_bot": { + "health": 1300, + "max_health": 1300 + }, + "dota_goodguys_fort": { + "health": 4500, + "max_health": 4500 + } + }, + "dire": { + "dota_badguys_tower2_top": { + "health": 2496, + "max_health": 2500 + }, + "dota_badguys_tower3_top": { + "health": 2500, + "max_health": 2500 + }, + "dota_badguys_tower2_mid": { + "health": 2500, + "max_health": 2500 + }, + "dota_badguys_tower3_mid": { + "health": 2500, + "max_health": 2500 + }, + "dota_badguys_tower1_bot": { + "health": 1260, + "max_health": 1800 + }, + "dota_badguys_tower2_bot": { + "health": 2500, + "max_health": 2500 + }, + "dota_badguys_tower3_bot": { + "health": 2500, + "max_health": 2500 + }, + "dota_badguys_tower4_top": { + "health": 2600, + "max_health": 2600 + }, + "dota_badguys_tower4_bot": { + "health": 2600, + "max_health": 2600 + }, + "bad_rax_melee_top": { + "health": 2200, + "max_health": 2200 + }, + "bad_rax_range_top": { + "health": 1300, + "max_health": 1300 + }, + "bad_rax_melee_mid": { + "health": 2200, + "max_health": 2200 + }, + "bad_rax_range_mid": { + "health": 1300, + "max_health": 1300 + }, + "bad_rax_melee_bot": { + "health": 2200, + "max_health": 2200 + }, + "bad_rax_range_bot": { + "health": 1300, + "max_health": 1300 + }, + "dota_badguys_fort": { + "health": 4500, + "max_health": 4500 + } + } + }, + "player": { + "team2": { + "player0": { + "steamid": "76561197979938082", + "name": "N0tail", + "activity": "playing", + "kills": 1, + "deaths": 2, + "assists": 7, + "last_hits": 49, + "denies": 3, + "kill_streak": 1, + "commands_issued": 3482, + "kill_list": { + "victimid_8": 1 + }, + "team_name": "radiant", + "gold": 332, + "gold_reliable": 203, + "gold_unreliable": 129, + "gold_from_hero_kills": 580, + "gold_from_creep_kills": 290, + "gold_from_income": 2022, + "gold_from_shared": 388, + "gpm": 254, + "xpm": 356, + "net_worth": 4607, + "hero_damage": 4505, + "wards_purchased": 20, + "wards_placed": 9, + "wards_destroyed": 2, + "runes_activated": 1, + "camps_stacked": 12, + "support_gold_spent": 655, + "consumable_gold_spent": 1235, + "item_gold_spent": 4275, + "gold_lost_to_death": 49, + "gold_spent_on_buybacks": 0 + }, + "player1": { + "steamid": "76561198071885769", + "name": "SumaiL", + "activity": "playing", + "kills": 3, + "deaths": 1, + "assists": 6, + "last_hits": 137, + "denies": 19, + "kill_streak": 3, + "commands_issued": 3596, + "kill_list": { + "victimid_5": 1, + "victimid_6": 1, + "victimid_8": 1 + }, + "team_name": "radiant", + "gold": 2215, + "gold_reliable": 579, + "gold_unreliable": 1636, + "gold_from_hero_kills": 1055, + "gold_from_creep_kills": 3670, + "gold_from_income": 2022, + "gold_from_shared": 471, + "gpm": 483, + "xpm": 529, + "net_worth": 9870, + "hero_damage": 8137, + "wards_purchased": 0, + "wards_placed": 0, + "wards_destroyed": 1, + "runes_activated": 2, + "camps_stacked": 0, + "support_gold_spent": 0, + "consumable_gold_spent": 550, + "item_gold_spent": 7700, + "gold_lost_to_death": 5, + "gold_spent_on_buybacks": 0 + }, + "player2": { + "steamid": "76561198048536965", + "name": "Ceb", + "activity": "playing", + "kills": 2, + "deaths": 6, + "assists": 8, + "last_hits": 86, + "denies": 8, + "kill_streak": 0, + "commands_issued": 8550, + "kill_list": { + "victimid_6": 2 + }, + "team_name": "radiant", + "gold": 938, + "gold_reliable": 782, + "gold_unreliable": 156, + "gold_from_hero_kills": 859, + "gold_from_creep_kills": 2740, + "gold_from_income": 2022, + "gold_from_shared": 451, + "gpm": 365, + "xpm": 359, + "net_worth": 5648, + "hero_damage": 6095, + "wards_purchased": 0, + "wards_placed": 3, + "wards_destroyed": 0, + "runes_activated": 0, + "camps_stacked": 1, + "support_gold_spent": 0, + "consumable_gold_spent": 570, + "item_gold_spent": 4835, + "gold_lost_to_death": 713, + "gold_spent_on_buybacks": 623 + }, + "player3": { + "steamid": "76561198064001473", + "name": "Saksa", + "activity": "playing", + "kills": 3, + "deaths": 5, + "assists": 8, + "last_hits": 26, + "denies": 9, + "kill_streak": 0, + "commands_issued": 7713, + "kill_list": { + "victimid_5": 1, + "victimid_7": 2 + }, + "team_name": "radiant", + "gold": 57, + "gold_reliable": 57, + "gold_unreliable": 0, + "gold_from_hero_kills": 1185, + "gold_from_creep_kills": 651, + "gold_from_income": 2022, + "gold_from_shared": 498, + "gpm": 245, + "xpm": 298, + "net_worth": 3732, + "hero_damage": 9387, + "wards_purchased": 20, + "wards_placed": 11, + "wards_destroyed": 2, + "runes_activated": 3, + "camps_stacked": 0, + "support_gold_spent": 400, + "consumable_gold_spent": 1230, + "item_gold_spent": 3375, + "gold_lost_to_death": 248, + "gold_spent_on_buybacks": 479 + }, + "player4": { + "steamid": "76561198054320440", + "name": "Topson", + "activity": "playing", + "kills": 4, + "deaths": 4, + "assists": 5, + "last_hits": 83, + "denies": 13, + "kill_streak": 0, + "commands_issued": 9419, + "kill_list": { + "victimid_5": 2, + "victimid_7": 1, + "victimid_8": 1 + }, + "team_name": "radiant", + "gold": 1176, + "gold_reliable": 578, + "gold_unreliable": 598, + "gold_from_hero_kills": 1118, + "gold_from_creep_kills": 2358, + "gold_from_income": 2022, + "gold_from_shared": 406, + "gpm": 374, + "xpm": 439, + "net_worth": 6821, + "hero_damage": 12058, + "wards_purchased": 0, + "wards_placed": 0, + "wards_destroyed": 0, + "runes_activated": 9, + "camps_stacked": 1, + "support_gold_spent": 80, + "consumable_gold_spent": 850, + "item_gold_spent": 5490, + "gold_lost_to_death": 333, + "gold_spent_on_buybacks": 0 + } + }, + "team3": { + "player5": { + "steamid": "76561198042528392", + "name": "KuroKy", + "activity": "playing", + "kills": 3, + "deaths": 4, + "assists": 8, + "last_hits": 22, + "denies": 4, + "kill_streak": 0, + "commands_issued": 3428, + "kill_list": { + "victimid_1": 1, + "victimid_2": 1, + "victimid_3": 1 + }, + "team_name": "dire", + "gold": 280, + "gold_reliable": 220, + "gold_unreliable": 60, + "gold_from_hero_kills": 1246, + "gold_from_creep_kills": 812, + "gold_from_income": 2022, + "gold_from_shared": 587, + "gpm": 240, + "xpm": 358, + "net_worth": 3380, + "hero_damage": 8330, + "wards_purchased": 17, + "wards_placed": 9, + "wards_destroyed": 3, + "runes_activated": 0, + "camps_stacked": 0, + "support_gold_spent": 350, + "consumable_gold_spent": 1420, + "item_gold_spent": 3250, + "gold_lost_to_death": 234, + "gold_spent_on_buybacks": 471 + }, + "player6": { + "steamid": "76561197994770931", + "name": "MinD_ContRoL", + "activity": "playing", + "kills": 2, + "deaths": 3, + "assists": 7, + "last_hits": 111, + "denies": 12, + "kill_streak": 0, + "commands_issued": 4722, + "kill_list": { + "victimid_3": 1, + "victimid_4": 1 + }, + "team_name": "dire", + "gold": 1019, + "gold_reliable": 622, + "gold_unreliable": 397, + "gold_from_hero_kills": 836, + "gold_from_creep_kills": 3034, + "gold_from_income": 2022, + "gold_from_shared": 432, + "gpm": 372, + "xpm": 446, + "net_worth": 6734, + "hero_damage": 11826, + "wards_purchased": 3, + "wards_placed": 2, + "wards_destroyed": 0, + "runes_activated": 2, + "camps_stacked": 0, + "support_gold_spent": 50, + "consumable_gold_spent": 730, + "item_gold_spent": 5815, + "gold_lost_to_death": 434, + "gold_spent_on_buybacks": 0 + }, + "player7": { + "steamid": "76561198065514372", + "name": "Miracle-", + "activity": "playing", + "kills": 6, + "deaths": 3, + "assists": 8, + "last_hits": 84, + "denies": 21, + "kill_streak": 2, + "commands_issued": 7443, + "kill_list": { + "victimid_0": 1, + "victimid_2": 2, + "victimid_4": 3 + }, + "team_name": "dire", + "gold": 943, + "gold_reliable": 242, + "gold_unreliable": 701, + "gold_from_hero_kills": 1854, + "gold_from_creep_kills": 3345, + "gold_from_income": 2022, + "gold_from_shared": 746, + "gpm": 413, + "xpm": 490, + "net_worth": 8043, + "hero_damage": 13005, + "wards_purchased": 1, + "wards_placed": 1, + "wards_destroyed": 0, + "runes_activated": 3, + "camps_stacked": 0, + "support_gold_spent": 0, + "consumable_gold_spent": 560, + "item_gold_spent": 7075, + "gold_lost_to_death": 312, + "gold_spent_on_buybacks": 0 + }, + "player8": { + "steamid": "76561198061622614", + "name": "Gh", + "activity": "playing", + "kills": 3, + "deaths": 3, + "assists": 6, + "last_hits": 33, + "denies": 1, + "kill_streak": 0, + "commands_issued": 6594, + "kill_list": { + "victimid_0": 1, + "victimid_2": 1, + "victimid_3": 1 + }, + "team_name": "dire", + "gold": 144, + "gold_reliable": 144, + "gold_unreliable": 0, + "gold_from_hero_kills": 919, + "gold_from_creep_kills": 501, + "gold_from_income": 2022, + "gold_from_shared": 387, + "gpm": 239, + "xpm": 299, + "net_worth": 3834, + "hero_damage": 8279, + "wards_purchased": 18, + "wards_placed": 11, + "wards_destroyed": 2, + "runes_activated": 4, + "camps_stacked": 5, + "support_gold_spent": 575, + "consumable_gold_spent": 1435, + "item_gold_spent": 3645, + "gold_lost_to_death": 176, + "gold_spent_on_buybacks": 0 + }, + "player9": { + "steamid": "76561198074261550", + "name": "iLTW", + "activity": "playing", + "kills": 3, + "deaths": 0, + "assists": 7, + "last_hits": 161, + "denies": 13, + "kill_streak": 3, + "commands_issued": 8222, + "kill_list": { + "victimid_2": 2, + "victimid_3": 1 + }, + "team_name": "dire", + "gold": 423, + "gold_reliable": 194, + "gold_unreliable": 229, + "gold_from_hero_kills": 1078, + "gold_from_creep_kills": 3473, + "gold_from_income": 2022, + "gold_from_shared": 442, + "gpm": 501, + "xpm": 518, + "net_worth": 9053, + "hero_damage": 10671, + "wards_purchased": 0, + "wards_placed": 0, + "wards_destroyed": 0, + "runes_activated": 3, + "camps_stacked": 1, + "support_gold_spent": 0, + "consumable_gold_spent": 1280, + "item_gold_spent": 8605, + "gold_lost_to_death": 0, + "gold_spent_on_buybacks": 0 + } + } + }, + "hero": { + "team2": { + "player0": { + "xpos": -1471, + "ypos": -3919, + "id": 66, + "name": "npc_dota_hero_chen", + "level": 11, + "xp": 6896, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 554, + "buyback_cooldown": 0, + "health": 1250, + "max_health": 1250, + "health_percent": 100, + "mana": 388, + "max_mana": 807, + "mana_percent": 48, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": true, + "talent_2": false, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player1": { + "xpos": -4567, + "ypos": -17, + "id": 10, + "name": "npc_dota_hero_morphling", + "level": 14, + "xp": 10249, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 959, + "buyback_cooldown": 0, + "health": 1029, + "max_health": 1080, + "health_percent": 95, + "mana": 566, + "max_mana": 807, + "mana_percent": 70, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": true, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": false, + "talent_2": true, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player2": { + "xpos": 3061, + "ypos": -3757, + "id": 97, + "name": "npc_dota_hero_magnataur", + "level": 11, + "xp": 6966, + "alive": false, + "respawn_seconds": 31, + "buyback_cost": 634, + "buyback_cooldown": 2442, + "health": 0, + "max_health": 1660, + "health_percent": 0, + "mana": 731, + "max_mana": 805, + "mana_percent": 90, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": false, + "talent_2": false, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player3": { + "xpos": -249, + "ypos": 430, + "id": 119, + "name": "npc_dota_hero_dark_willow", + "level": 10, + "xp": 5773, + "alive": false, + "respawn_seconds": 5, + "buyback_cost": 487, + "buyback_cooldown": 2440, + "health": 0, + "max_health": 1120, + "health_percent": 0, + "mana": 248, + "max_mana": 985, + "mana_percent": 25, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": false, + "talent_2": true, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player4": { + "xpos": -3219, + "ypos": 5734, + "id": 123, + "name": "npc_dota_hero_hoodwink", + "level": 12, + "xp": 8519, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 724, + "buyback_cooldown": 0, + "health": 1137, + "max_health": 1160, + "health_percent": 98, + "mana": 344, + "max_mana": 807, + "mana_percent": 42, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": false, + "talent_2": true, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + } + }, + "team3": { + "player5": { + "xpos": 2099, + "ypos": -2100, + "id": 20, + "name": "npc_dota_hero_vengefulspirit", + "level": 11, + "xp": 6943, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 460, + "buyback_cooldown": 2490, + "health": 1138, + "max_health": 1285, + "health_percent": 88, + "mana": 683, + "max_mana": 719, + "mana_percent": 94, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": true, + "selected_unit": false, + "talent_1": true, + "talent_2": false, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player6": { + "xpos": 2810, + "ypos": -4661, + "id": 129, + "name": "npc_dota_hero_mars", + "level": 13, + "xp": 8646, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 718, + "buyback_cooldown": 0, + "health": 1740, + "max_health": 1740, + "health_percent": 100, + "mana": 315, + "max_mana": 699, + "mana_percent": 45, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": true, + "talent_2": false, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player7": { + "xpos": 761, + "ypos": 66, + "id": 74, + "name": "npc_dota_hero_invoker", + "level": 13, + "xp": 9504, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 818, + "buyback_cooldown": 0, + "health": 1284, + "max_health": 1810, + "health_percent": 70, + "mana": 256, + "max_mana": 1227, + "mana_percent": 20, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": true, + "aghanims_shard": true, + "smoked": false, + "has_debuff": false, + "selected_unit": true, + "talent_1": false, + "talent_2": false, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player8": { + "xpos": -2084, + "ypos": 6994, + "id": 110, + "name": "npc_dota_hero_phoenix", + "level": 10, + "xp": 5800, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 494, + "buyback_cooldown": 0, + "health": 1400, + "max_health": 1400, + "health_percent": 100, + "mana": 319, + "max_mana": 495, + "mana_percent": 64, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": true, + "talent_2": false, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + }, + "player9": { + "xpos": 3711, + "ypos": -4981, + "id": 109, + "name": "npc_dota_hero_terrorblade", + "level": 14, + "xp": 10044, + "alive": true, + "respawn_seconds": 0, + "buyback_cost": 896, + "buyback_cooldown": 0, + "health": 1580, + "max_health": 1580, + "health_percent": 100, + "mana": 236, + "max_mana": 771, + "mana_percent": 30, + "silenced": false, + "stunned": false, + "disarmed": false, + "magicimmune": false, + "hexed": false, + "muted": false, + "break": false, + "aghanims_scepter": false, + "aghanims_shard": false, + "smoked": false, + "has_debuff": false, + "selected_unit": false, + "talent_1": false, + "talent_2": true, + "talent_3": false, + "talent_4": false, + "talent_5": false, + "talent_6": false, + "talent_7": false, + "talent_8": false + } + } + }, + "abilities": { + "team2": { + "player0": { + "ability0": { + "name": "chen_penitence", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "chen_holy_persuasion", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "chen_divine_favor", + "level": 4, + "can_cast": false, + "passive": true, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "chen_hand_of_god", + "level": 1, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 58, + "ultimate": true + }, + "ability4": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability5": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player1": { + "ability0": { + "name": "morphling_waveform", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "morphling_adaptive_strike_agi", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "morphling_adaptive_strike_str", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "morphling_morph_agi", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability4": { + "name": "morphling_morph_str", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability5": { + "name": "morphling_replicate", + "level": 1, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 40, + "ultimate": true + }, + "ability6": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability7": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player2": { + "ability0": { + "name": "magnataur_shockwave", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "magnataur_empower", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "magnataur_skewer", + "level": 2, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 13, + "ultimate": false + }, + "ability3": { + "name": "magnataur_reverse_polarity", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": true + }, + "ability4": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability5": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player3": { + "ability0": { + "name": "dark_willow_bramble_maze", + "level": 3, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "dark_willow_shadow_realm", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "dark_willow_cursed_crown", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "dark_willow_bedlam", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": true + }, + "ability4": { + "name": "dark_willow_terrorize", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": true + }, + "ability5": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability6": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player4": { + "ability0": { + "name": "hoodwink_acorn_shot", + "level": 4, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 9, + "ultimate": false + }, + "ability1": { + "name": "hoodwink_bushwhack", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "hoodwink_scurry", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false, + "charges": 2, + "max_charges": 2, + "charge_cooldown": 0 + }, + "ability3": { + "name": "hoodwink_sharpshooter", + "level": 2, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": true + }, + "ability4": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability5": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + } + }, + "team3": { + "player5": { + "ability0": { + "name": "vengefulspirit_magic_missile", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "vengefulspirit_wave_of_terror", + "level": 2, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 9, + "ultimate": false + }, + "ability2": { + "name": "vengefulspirit_command_aura", + "level": 3, + "can_cast": false, + "passive": true, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "vengefulspirit_nether_swap", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": true + }, + "ability4": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player6": { + "ability0": { + "name": "mars_spear", + "level": 4, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 7, + "ultimate": false + }, + "ability1": { + "name": "mars_gods_rebuke", + "level": 4, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 3, + "ultimate": false + }, + "ability2": { + "name": "mars_bulwark", + "level": 2, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "mars_arena_of_blood", + "level": 2, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 68, + "ultimate": true + }, + "ability4": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability5": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player7": { + "ability0": { + "name": "invoker_quas", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "invoker_wex", + "level": 6, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "invoker_exort", + "level": 3, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "invoker_chaos_meteor", + "level": 1, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 54, + "ultimate": false + }, + "ability4": { + "name": "invoker_sun_strike", + "level": 1, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 19, + "ultimate": false + }, + "ability5": { + "name": "invoker_invoke", + "level": 1, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 1, + "ultimate": true + }, + "ability6": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player8": { + "ability0": { + "name": "phoenix_icarus_dive", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability1": { + "name": "phoenix_fire_spirits", + "level": 4, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability2": { + "name": "phoenix_sun_ray", + "level": 3, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability3": { + "name": "phoenix_sun_ray_toggle_move", + "level": 1, + "can_cast": false, + "passive": false, + "ability_active": false, + "cooldown": 0, + "ultimate": false + }, + "ability4": { + "name": "phoenix_supernova", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": true + }, + "ability5": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + }, + "ability6": { + "name": "plus_guild_banner", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + }, + "player9": { + "ability0": { + "name": "terrorblade_reflection", + "level": 2, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 16, + "ultimate": false + }, + "ability1": { + "name": "terrorblade_conjure_image", + "level": 4, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 3, + "ultimate": false + }, + "ability2": { + "name": "terrorblade_metamorphosis", + "level": 4, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 51, + "ultimate": false + }, + "ability3": { + "name": "terrorblade_sunder", + "level": 2, + "can_cast": false, + "passive": false, + "ability_active": true, + "cooldown": 8, + "ultimate": true + }, + "ability4": { + "name": "plus_high_five", + "level": 1, + "can_cast": true, + "passive": false, + "ability_active": true, + "cooldown": 0, + "ultimate": false + } + } + } + }, + "items": { + "team2": { + "player0": { + "slot0": { + "name": "item_headdress", + "purchaser": 0, + "passive": true + }, + "slot1": { + "name": "item_boots", + "purchaser": 0, + "passive": true + }, + "slot2": { + "name": "item_ring_of_basilius", + "purchaser": 0, + "passive": true + }, + "slot3": { + "name": "item_magic_stick", + "purchaser": 0, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 10 + }, + "slot4": { + "name": "item_infused_raindrop", + "purchaser": 0, + "passive": true, + "charges": 2 + }, + "slot5": { + "name": "item_force_staff", + "purchaser": 0, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot6": { + "name": "item_smoke_of_deceit", + "purchaser": 0, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 0, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 2 + }, + "neutral0": { + "name": "empty" + } + }, + "player1": { + "slot0": { + "name": "item_circlet", + "purchaser": 1, + "passive": true + }, + "slot1": { + "name": "item_sphere", + "purchaser": 1, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot2": { + "name": "item_power_treads", + "purchaser": 1, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot3": { + "name": "item_magic_wand", + "purchaser": 1, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot4": { + "name": "item_lifesteal", + "purchaser": 1, + "passive": true + }, + "slot5": { + "name": "item_aegis", + "purchaser": 1, + "passive": true + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "item_branches", + "purchaser": 1, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 1, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "neutral0": { + "name": "item_imp_claw", + "purchaser": -1, + "passive": true + } + }, + "player2": { + "slot0": { + "name": "item_magic_stick", + "purchaser": 2, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 10 + }, + "slot1": { + "name": "item_mekansm", + "purchaser": 2, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot2": { + "name": "item_buckler", + "purchaser": 2, + "passive": true + }, + "slot3": { + "name": "item_soul_ring", + "purchaser": 2, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot4": { + "name": "item_arcane_boots", + "purchaser": 2, + "can_cast": false, + "cooldown": 37, + "passive": false + }, + "slot5": { + "name": "item_quelling_blade", + "purchaser": 2, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot6": { + "name": "item_smoke_of_deceit", + "purchaser": 0, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 2, + "can_cast": false, + "cooldown": 41, + "passive": false, + "charges": 2 + }, + "neutral0": { + "name": "item_possessed_mask", + "purchaser": -1, + "passive": true + } + }, + "player3": { + "slot0": { + "name": "item_boots", + "purchaser": 3, + "passive": true + }, + "slot1": { + "name": "item_aether_lens", + "purchaser": 3, + "passive": true + }, + "slot2": { + "name": "item_magic_wand", + "purchaser": 3, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 20 + }, + "slot3": { + "name": "item_ward_dispenser", + "purchaser": 3, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot4": { + "name": "item_enchanted_mango", + "purchaser": -1, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot5": { + "name": "item_wind_lace", + "purchaser": 3, + "passive": true + }, + "slot6": { + "name": "item_trusty_shovel", + "purchaser": -1, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot7": { + "name": "item_smoke_of_deceit", + "purchaser": 3, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 3, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 2 + }, + "neutral0": { + "name": "item_keen_optic", + "purchaser": -1, + "passive": true + } + }, + "player4": { + "slot0": { + "name": "item_bottle", + "purchaser": 4, + "contains_rune": "empty", + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot1": { + "name": "item_power_treads", + "purchaser": 4, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot2": { + "name": "item_dust", + "purchaser": 4, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot3": { + "name": "item_magic_wand", + "purchaser": 4, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot4": { + "name": "item_slippers", + "purchaser": 4, + "passive": true + }, + "slot5": { + "name": "item_maelstrom", + "purchaser": 4, + "passive": true + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 4, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 2 + }, + "neutral0": { + "name": "item_ironwood_tree", + "purchaser": -1, + "can_cast": true, + "cooldown": 0, + "passive": false + } + } + }, + "team3": { + "player5": { + "slot0": { + "name": "item_fluffy_hat", + "purchaser": 5, + "passive": true + }, + "slot1": { + "name": "item_tranquil_boots", + "purchaser": 5, + "passive": true + }, + "slot2": { + "name": "item_wind_lace", + "purchaser": 5, + "passive": true + }, + "slot3": { + "name": "item_medallion_of_courage", + "purchaser": 5, + "can_cast": false, + "cooldown": 8, + "passive": false + }, + "slot4": { + "name": "item_magic_wand", + "purchaser": 5, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot5": { + "name": "item_ward_dispenser", + "purchaser": 5, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 5, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "neutral0": { + "name": "item_faded_broach", + "purchaser": -1, + "passive": true + } + }, + "player6": { + "slot0": { + "name": "item_phase_boots", + "purchaser": 6, + "can_cast": false, + "cooldown": 6, + "passive": false + }, + "slot1": { + "name": "item_blink", + "purchaser": 6, + "can_cast": false, + "cooldown": 7, + "passive": false + }, + "slot2": { + "name": "item_magic_wand", + "purchaser": 6, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 3 + }, + "slot3": { + "name": "item_quelling_blade", + "purchaser": 6, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot4": { + "name": "item_soul_ring", + "purchaser": 6, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot5": { + "name": "item_bracer", + "purchaser": 6, + "passive": true + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 6, + "can_cast": false, + "cooldown": 27, + "passive": false, + "charges": 2 + }, + "neutral0": { + "name": "item_broom_handle", + "purchaser": -1, + "passive": true + } + }, + "player7": { + "slot0": { + "name": "item_boots", + "purchaser": 7, + "passive": true + }, + "slot1": { + "name": "item_magic_wand", + "purchaser": 7, + "can_cast": false, + "cooldown": 0, + "passive": false, + "charges": 0 + }, + "slot2": { + "name": "item_hand_of_midas", + "purchaser": 7, + "can_cast": false, + "cooldown": 61, + "passive": false + }, + "slot3": { + "name": "item_spirit_vessel", + "purchaser": 7, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 2 + }, + "slot4": { + "name": "item_null_talisman", + "purchaser": 7, + "passive": true + }, + "slot5": { + "name": "item_null_talisman", + "purchaser": 7, + "passive": true + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 7, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "neutral0": { + "name": "item_ocean_heart", + "purchaser": -1, + "passive": true + } + }, + "player8": { + "slot0": { + "name": "item_tranquil_boots", + "purchaser": 8, + "passive": true + }, + "slot1": { + "name": "item_magic_wand", + "purchaser": 8, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 3 + }, + "slot2": { + "name": "empty" + }, + "slot3": { + "name": "item_void_stone", + "purchaser": 8, + "passive": true + }, + "slot4": { + "name": "item_wind_lace", + "purchaser": 8, + "passive": true + }, + "slot5": { + "name": "item_gauntlets", + "purchaser": 8, + "passive": true + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 8, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 2 + }, + "neutral0": { + "name": "empty" + } + }, + "player9": { + "slot0": { + "name": "item_power_treads", + "purchaser": 9, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot1": { + "name": "item_dragon_lance", + "purchaser": 9, + "passive": true + }, + "slot2": { + "name": "item_magic_wand", + "purchaser": 9, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 7 + }, + "slot3": { + "name": "item_manta", + "purchaser": 9, + "can_cast": false, + "cooldown": 25, + "passive": false + }, + "slot4": { + "name": "item_quelling_blade", + "purchaser": 9, + "can_cast": true, + "cooldown": 0, + "passive": false + }, + "slot5": { + "name": "empty" + }, + "slot6": { + "name": "empty" + }, + "slot7": { + "name": "empty" + }, + "slot8": { + "name": "empty" + }, + "stash0": { + "name": "empty" + }, + "stash1": { + "name": "empty" + }, + "stash2": { + "name": "empty" + }, + "stash3": { + "name": "empty" + }, + "stash4": { + "name": "empty" + }, + "stash5": { + "name": "empty" + }, + "teleport0": { + "name": "item_tpscroll", + "purchaser": 9, + "can_cast": true, + "cooldown": 0, + "passive": false, + "charges": 1 + }, + "neutral0": { + "name": "item_ironwood_tree", + "purchaser": -1, + "can_cast": true, + "cooldown": 0, + "passive": false + } + } + } + }, + "draft": { + "activeteam": 0, + "pick": false, + "activeteam_time_remaining": 0, + "radiant_bonus_time": 0, + "dire_bonus_time": 0, + "team2": { + "home_team": true, + "pick0_id": 123, + "pick0_class": "hoodwink", + "pick1_id": 97, + "pick1_class": "magnataur", + "pick2_id": 119, + "pick2_class": "dark_willow", + "pick3_id": 66, + "pick3_class": "chen", + "pick4_id": 10, + "pick4_class": "morphling", + "ban0_id": 91, + "ban0_class": "wisp", + "ban1_id": 48, + "ban1_class": "luna", + "ban2_id": 29, + "ban2_class": "tidehunter", + "ban3_id": 98, + "ban3_class": "shredder", + "ban4_id": 88, + "ban4_class": "nyx_assassin", + "ban5_id": 102, + "ban5_class": "abaddon", + "ban6_id": 112, + "ban6_class": "winter_wyvern" + }, + "team3": { + "home_team": false, + "pick0_id": 74, + "pick0_class": "invoker", + "pick1_id": 109, + "pick1_class": "terrorblade", + "pick2_id": 110, + "pick2_class": "phoenix", + "pick3_id": 129, + "pick3_class": "mars", + "pick4_id": 20, + "pick4_class": "vengefulspirit", + "ban0_id": 120, + "ban0_class": "pangolier", + "ban1_id": 2, + "ban1_class": "axe", + "ban2_id": 6, + "ban2_class": "drow_ranger", + "ban3_id": 41, + "ban3_class": "faceless_void", + "ban4_id": 89, + "ban4_class": "naga_siren", + "ban5_id": 8, + "ban5_class": "juggernaut", + "ban6_id": 52, + "ban6_class": "leshrac" + } + }, + "wearables": { + "team2": { + "player0": { + "wearable0": 13248, + "wearable1": 13250, + "wearable2": 13249, + "wearable3": 13251, + "wearable4": 13252, + "wearable5": 567, + "wearable6": 8632, + "wearable7": 521, + "wearable8": 647, + "wearable9": 19006, + "wearable10": 16286, + "wearable11": 14912 + }, + "player1": { + "wearable0": 647, + "wearable1": 16286, + "wearable2": 14912, + "wearable3": 7603, + "wearable4": 8808, + "wearable5": 8810, + "wearable6": 8809, + "wearable7": 8807, + "wearable8": 8632, + "wearable9": 507 + }, + "player2": { + "wearable0": 8300, + "wearable1": 9971, + "wearable2": 14295, + "wearable3": 9974, + "wearable4": 9973, + "wearable5": 8059, + "wearable6": 743, + "wearable7": 647, + "wearable8": 19006, + "wearable9": 16286, + "wearable10": 18393, + "wearable11": 14912 + }, + "player3": { + "wearable0": 12327, + "wearable1": 642, + "wearable2": 646, + "wearable3": 641, + "wearable4": 651, + "wearable5": 8632, + "wearable6": 653, + "wearable7": 720, + "wearable8": 16286, + "wearable9": 14912 + }, + "player4": { + "wearable0": 749, + "wearable1": 750, + "wearable2": 751, + "wearable3": 752, + "wearable4": 8632, + "wearable5": 647, + "wearable6": 19006, + "wearable7": 16286, + "wearable8": 14912 + } + }, + "team3": { + "player5": { + "wearable0": 5344, + "wearable1": 8919, + "wearable2": 12420, + "wearable3": 8920, + "wearable4": 8632, + "wearable5": 517, + "wearable6": 19006, + "wearable7": 14912 + }, + "player6": { + "wearable0": 673, + "wearable1": 14916, + "wearable2": 14915, + "wearable3": 13538, + "wearable4": 18370, + "wearable5": 12568, + "wearable6": 717, + "wearable7": 647, + "wearable8": 19006, + "wearable9": 14912 + }, + "player7": { + "wearable0": 7849, + "style0": 0, + "wearable1": 6201, + "style1": 1, + "wearable2": 98, + "wearable3": 6194, + "style3": 1, + "wearable4": 6929, + "style4": 1, + "wearable5": 6199, + "wearable6": 8574, + "wearable7": 7582, + "wearable8": 683, + "wearable9": 647, + "wearable10": 19006, + "wearable11": 18394, + "wearable12": 14912 + }, + "player8": { + "wearable0": 13408, + "wearable1": 14993, + "wearable2": 8632, + "wearable3": 535, + "wearable4": 13414, + "wearable5": 14912 + }, + "player9": { + "wearable0": 9500, + "wearable1": 9499, + "wearable2": 8105, + "wearable3": 5957, + "wearable4": 9501, + "wearable5": 8632, + "wearable6": 540, + "wearable7": 647, + "wearable8": 19006, + "wearable9": 14912 + } + } + }, + "previously": { + "map": { + "clock_time": 1161, + "dire_ward_purchase_cooldown": 99 + }, + "hero": { + "team2": { + "player0": { + "xpos": -1461, + "ypos": -3922 + } + }, + "team3": { + "player5": { + "xpos": 2106, + "ypos": -2111 + }, + "player6": { + "xpos": 2821, + "ypos": -4654 + }, + "player7": { + "xpos": 756, + "ypos": 76 + }, + "player8": { + "ypos": 7000 + }, + "player9": { + "xpos": 3710, + "ypos": -4969 + } + } + } + } + } as Dota2Raw; + \ No newline at end of file diff --git a/src/fonts/Rajdhani-Bold.woff b/src/fonts/Rajdhani-Bold.woff new file mode 100644 index 0000000..31c6875 Binary files /dev/null and b/src/fonts/Rajdhani-Bold.woff differ diff --git a/src/fonts/Rajdhani-Light.woff b/src/fonts/Rajdhani-Light.woff new file mode 100644 index 0000000..33b1bac Binary files /dev/null and b/src/fonts/Rajdhani-Light.woff differ diff --git a/src/fonts/Rajdhani-Medium.woff b/src/fonts/Rajdhani-Medium.woff new file mode 100644 index 0000000..41a6159 Binary files /dev/null and b/src/fonts/Rajdhani-Medium.woff differ diff --git a/src/fonts/Rajdhani-Regular.woff b/src/fonts/Rajdhani-Regular.woff new file mode 100644 index 0000000..b482ea6 Binary files /dev/null and b/src/fonts/Rajdhani-Regular.woff differ diff --git a/src/fonts/Rajdhani-SemiBold.woff b/src/fonts/Rajdhani-SemiBold.woff new file mode 100644 index 0000000..8199dd9 Binary files /dev/null and b/src/fonts/Rajdhani-SemiBold.woff differ diff --git a/src/fonts/rajdhani.css b/src/fonts/rajdhani.css new file mode 100644 index 0000000..31dd8fd --- /dev/null +++ b/src/fonts/rajdhani.css @@ -0,0 +1,40 @@ +@font-face { + font-family: 'Rajdhani'; + src: url('Rajdhani-Bold.woff') format('woff'); + font-weight: bold; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Rajdhani'; + src: url('Rajdhani-Medium.woff') format('woff'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Rajdhani'; + src: url('Rajdhani-Light.woff') format('woff'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Rajdhani'; + src: url('Rajdhani-Regular.woff') format('woff'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Rajdhani'; + src: url('Rajdhani-SemiBold.woff') format('woff'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + diff --git a/src/index.css b/src/index.css index cef3b29..2b25a79 100644 --- a/src/index.css +++ b/src/index.css @@ -9,10 +9,11 @@ body, body { margin: 0; - font-family: 'Stratum2', 'Montserrat', 'Roboto', sans-serif; + font-family: 'Rajdhani','Stratum2', 'Montserrat', 'Roboto', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - /*background-image: url('./assets/bg.png');/**/ + /*background-image: url('./HUD/image.png');/**/ + background-position: bottom; } @font-face { diff --git a/src/index.tsx b/src/index.tsx index fc60a26..65e5310 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,8 +1,7 @@ import React from "react"; import ReactDOM from "react-dom"; import "./index.css"; -import "./fonts/Louis George Cafe.ttf"; -import "./fonts/Rounded_Elegance.ttf"; +import "./fonts/rajdhani.css"; import App from "./App"; ReactDOM.render(, document.getElementById("root"));