From 989ede863807fb53bb1d6f8d8b3433ca9b40ce73 Mon Sep 17 00:00:00 2001
From: Hubert Walczak
Date: Mon, 11 Sep 2023 12:37:32 +0200
Subject: [PATCH] initial commit
---
.env | 2 +
.env.development | 1 +
.gitignore | 24 ++
LICENSE | 21 +
OpenBrowserPlugin.js | 49 +++
README.md | 143 +++++++
aco | 8 +
craco.config.js | 45 ++
icon.png | Bin 0 -> 33887 bytes
package.json | 60 +++
preview.png | Bin 0 -> 2501507 bytes
public/hud.json | 13 +
public/index.html | 23 ++
public/keybinds.json | 6 +
public/panel.json | 148 +++++++
public/radar.css | 48 +++
public/thumb.png | Bin 0 -> 1178 bytes
settings.png | Bin 0 -> 21971 bytes
sign.js | 75 ++++
src/App.tsx | 215 ++++++++++
src/HUD/Camera/Camera.tsx | 78 ++++
src/HUD/Camera/Container.tsx | 24 ++
src/HUD/Camera/index.scss | 13 +
src/HUD/Camera/mediaStream.ts | 153 +++++++
src/HUD/Indicators/Armor.tsx | 15 +
src/HUD/Indicators/Bomb.tsx | 15 +
src/HUD/Indicators/Defuse.tsx | 15 +
src/HUD/Killfeed/Kill.tsx | 55 +++
src/HUD/Killfeed/Killfeed.tsx | 76 ++++
src/HUD/Killfeed/killfeed.scss | 112 +++++
src/HUD/Layout/Layout.tsx | 135 ++++++
src/HUD/MapSeries/MapSeries.tsx | 62 +++
src/HUD/MapSeries/mapseries.scss | 153 +++++++
src/HUD/MatchBar/MatchBar.tsx | 203 +++++++++
src/HUD/MatchBar/SeriesBox.tsx | 44 ++
src/HUD/MatchBar/TeamLogo.tsx | 24 ++
src/HUD/MatchBar/TeamScore.tsx | 30 ++
src/HUD/MatchBar/WinIndicator.tsx | 12 +
src/HUD/MatchBar/matchbar.scss | 391 ++++++++++++++++++
src/HUD/MatchOverview/MatchOverview.tsx | 41 ++
src/HUD/Overview/Overview.tsx | 125 ++++++
src/HUD/PauseTimeout/Pause.tsx | 17 +
src/HUD/PauseTimeout/Timeout.tsx | 22 +
src/HUD/PlayerOverview/PlayerOverview.tsx | 104 +++++
src/HUD/PlayerOverview/playeroverview.scss | 74 ++++
src/HUD/Players/Avatar.tsx | 41 ++
src/HUD/Players/Observed.tsx | 106 +++++
src/HUD/Players/Player.tsx | 135 ++++++
src/HUD/Players/TeamBox.tsx | 25 ++
src/HUD/Players/observed.scss | 247 +++++++++++
src/HUD/Players/players.scss | 371 +++++++++++++++++
src/HUD/Radar/LexoRadar/LexoRadar.tsx | 110 +++++
.../Radar/LexoRadar/LexoRadarContainer.tsx | 322 +++++++++++++++
src/HUD/Radar/LexoRadar/assets/playerBg.png | Bin 0 -> 1039 bytes
src/HUD/Radar/LexoRadar/assets/shootFire.png | Bin 0 -> 3039 bytes
src/HUD/Radar/LexoRadar/assets/shootFire.zip | Bin 0 -> 3204 bytes
src/HUD/Radar/LexoRadar/config.ts | 5 +
src/HUD/Radar/LexoRadar/grenades/bomb.png | Bin 0 -> 7456 bytes
src/HUD/Radar/LexoRadar/grenades/firebomb.png | Bin 0 -> 2547 bytes
src/HUD/Radar/LexoRadar/grenades/flash.png | Bin 0 -> 4028 bytes
src/HUD/Radar/LexoRadar/grenades/frag.png | Bin 0 -> 1977 bytes
src/HUD/Radar/LexoRadar/grenades/index.ts | 5 +
src/HUD/Radar/LexoRadar/grenades/smoke.png | Bin 0 -> 1033 bytes
.../Radar/LexoRadar/grenades/weapon_decoy.png | Bin 0 -> 11894 bytes
.../LexoRadar/grenades/weapon_incgrenade.png | Bin 0 -> 6830 bytes
src/HUD/Radar/LexoRadar/index.css | 285 +++++++++++++
src/HUD/Radar/LexoRadar/interface.ts | 55 +++
.../Radar/LexoRadar/maps/de_ancient/index.ts | 15 +
.../Radar/LexoRadar/maps/de_ancient/radar.png | Bin 0 -> 27202 bytes
.../Radar/LexoRadar/maps/de_anubis/index.ts | 15 +
.../Radar/LexoRadar/maps/de_anubis/radar.png | Bin 0 -> 79099 bytes
.../Radar/LexoRadar/maps/de_cache/index.ts | 15 +
.../Radar/LexoRadar/maps/de_cache/radar.png | Bin 0 -> 15518 bytes
.../Radar/LexoRadar/maps/de_dust2/index.ts | 15 +
.../Radar/LexoRadar/maps/de_dust2/radar.png | Bin 0 -> 54357 bytes
.../Radar/LexoRadar/maps/de_inferno/index.ts | 15 +
.../Radar/LexoRadar/maps/de_inferno/radar.png | Bin 0 -> 61996 bytes
.../Radar/LexoRadar/maps/de_mirage/index.ts | 16 +
.../Radar/LexoRadar/maps/de_mirage/radar.png | Bin 0 -> 48062 bytes
src/HUD/Radar/LexoRadar/maps/de_nuke/index.ts | 37 ++
.../Radar/LexoRadar/maps/de_nuke/radar.png | Bin 0 -> 41478 bytes
.../Radar/LexoRadar/maps/de_overpass/index.ts | 15 +
.../LexoRadar/maps/de_overpass/radar.png | Bin 0 -> 130500 bytes
.../Radar/LexoRadar/maps/de_train/index.ts | 15 +
.../Radar/LexoRadar/maps/de_train/radar.png | Bin 0 -> 44900 bytes
.../Radar/LexoRadar/maps/de_vertigo/index.ts | 67 +++
.../Radar/LexoRadar/maps/de_vertigo/radar.png | Bin 0 -> 78640 bytes
src/HUD/Radar/LexoRadar/maps/index.ts | 71 ++++
src/HUD/Radar/Radar.tsx | 50 +++
src/HUD/Radar/RadarMaps.tsx | 70 ++++
src/HUD/Radar/radar.scss | 66 +++
src/HUD/SideBoxes/Money.tsx | 45 ++
src/HUD/SideBoxes/SideBox.tsx | 49 +++
src/HUD/SideBoxes/UtilityLevel.tsx | 108 +++++
src/HUD/SideBoxes/sideboxes.scss | 221 ++++++++++
src/HUD/TeamOverview/TeamOverview.tsx | 18 +
src/HUD/TeamOverview/teamoverview.scss | 42 ++
src/HUD/Timers/BombTimer.tsx | 49 +++
src/HUD/Timers/Countdown.ts | 46 +++
src/HUD/Timers/PlantDefuse.tsx | 41 ++
src/HUD/Tournament/Ladder.tsx | 145 +++++++
src/HUD/Tournament/Tournament.tsx | 62 +++
src/HUD/Tournament/tournament.scss | 147 +++++++
src/HUD/Trivia/Trivia.tsx | 43 ++
src/HUD/Trivia/trivia.scss | 27 ++
src/HUD/Weapon/Weapon.tsx | 19 +
src/HUD/countries.ts | 259 ++++++++++++
src/HUD/isSvg.ts | 11 +
src/api/actionManager.ts | 65 +++
src/api/api.ts | 56 +++
src/api/avatars.ts | 24 ++
src/api/interfaces.ts | 151 +++++++
src/assets/Icons.tsx | 61 +++
src/assets/Weapons.tsx | 142 +++++++
src/assets/bg.png | Bin 0 -> 2124351 bytes
src/assets/flash_assist.png | Bin 0 -> 9958 bytes
src/assets/flashed_kill.png | Bin 0 -> 774 bytes
src/assets/headshot.png | Bin 0 -> 34775 bytes
src/assets/images/bomb.svg | 3 +
src/assets/images/flashed_kill.svg | 34 ++
src/assets/images/headshot.svg | 52 +++
src/assets/images/icon_armor_full_default.svg | 3 +
src/assets/images/icon_armor_half_default.svg | 3 +
.../images/icon_armor_half_helmet_default.svg | 3 +
.../images/icon_armor_helmet_default.svg | 3 +
src/assets/images/icon_armor_none_default.svg | 3 +
src/assets/images/icon_blind.svg | 3 +
src/assets/images/icon_bomb_default.svg | 3 +
.../images/icon_bomb_explosion_default.svg | 3 +
src/assets/images/icon_bullets_default.svg | 3 +
src/assets/images/icon_burning.svg | 3 +
src/assets/images/icon_c4_default.svg | 3 +
src/assets/images/icon_defuse_default.svg | 3 +
src/assets/images/icon_health_default.svg | 3 +
.../images/icon_health_full_default.svg | 3 +
src/assets/images/icon_hourglass_default.svg | 3 +
src/assets/images/icon_microphone.svg | 3 +
src/assets/images/icon_pause_default.svg | 3 +
src/assets/images/icon_skull_default.svg | 3 +
src/assets/images/icon_timer_default.svg | 3 +
src/assets/images/logo_CT_default.png | Bin 0 -> 28748 bytes
src/assets/images/logo_T_default.png | Bin 0 -> 28212 bytes
src/assets/images/noscope.svg | 38 ++
src/assets/images/smoke_kill.svg | 51 +++
src/assets/images/suicide.svg | 70 ++++
src/assets/images/wallbang.svg | 36 ++
src/assets/noscope_kill.png | Bin 0 -> 781 bytes
src/assets/smoke_kill.png | Bin 0 -> 658 bytes
src/assets/wallbang.png | Bin 0 -> 497 bytes
src/assets/weapons/ak47.svg | 3 +
src/assets/weapons/aug.svg | 3 +
src/assets/weapons/awp.svg | 3 +
src/assets/weapons/bayonet.svg | 3 +
src/assets/weapons/bizon.svg | 3 +
src/assets/weapons/c4.svg | 3 +
src/assets/weapons/cz75a.svg | 3 +
src/assets/weapons/deagle.svg | 3 +
src/assets/weapons/decoy.svg | 3 +
src/assets/weapons/elite.svg | 3 +
src/assets/weapons/famas.svg | 3 +
src/assets/weapons/fiveseven.svg | 3 +
src/assets/weapons/flashbang.svg | 6 +
src/assets/weapons/g3sg1.svg | 3 +
src/assets/weapons/galilar.svg | 3 +
src/assets/weapons/glock.svg | 3 +
src/assets/weapons/hegrenade.svg | 7 +
src/assets/weapons/hkp2000.svg | 3 +
src/assets/weapons/incgrenade.svg | 3 +
src/assets/weapons/inferno.svg | 3 +
src/assets/weapons/knife.svg | 3 +
src/assets/weapons/knife_bayonet.svg | 3 +
src/assets/weapons/knife_butterfly.svg | 3 +
src/assets/weapons/knife_canis.svg | 3 +
src/assets/weapons/knife_cord.svg | 3 +
src/assets/weapons/knife_css.svg | 3 +
src/assets/weapons/knife_falchion.svg | 3 +
src/assets/weapons/knife_flip.svg | 3 +
src/assets/weapons/knife_gut.svg | 3 +
src/assets/weapons/knife_gypsy_jackknife.svg | 3 +
src/assets/weapons/knife_karambit.svg | 3 +
src/assets/weapons/knife_m9_bayonet.svg | 3 +
src/assets/weapons/knife_outdoor.svg | 3 +
src/assets/weapons/knife_push.svg | 3 +
src/assets/weapons/knife_skeleton.svg | 3 +
src/assets/weapons/knife_stiletto.svg | 3 +
src/assets/weapons/knife_survival_bowie.svg | 3 +
src/assets/weapons/knife_t.svg | 3 +
src/assets/weapons/knife_tactical.svg | 3 +
src/assets/weapons/knife_ursus.svg | 3 +
src/assets/weapons/knife_widowmaker.svg | 3 +
src/assets/weapons/m249.svg | 3 +
src/assets/weapons/m4a1.svg | 3 +
src/assets/weapons/m4a1_silencer.svg | 3 +
src/assets/weapons/m4a1_silencer_off.svg | 3 +
src/assets/weapons/mac10.svg | 3 +
src/assets/weapons/mag7.svg | 3 +
src/assets/weapons/molotov.svg | 3 +
src/assets/weapons/mp5sd.svg | 3 +
src/assets/weapons/mp7.svg | 3 +
src/assets/weapons/mp9.svg | 3 +
src/assets/weapons/negev.svg | 3 +
src/assets/weapons/nova.svg | 3 +
src/assets/weapons/out.svg | 3 +
src/assets/weapons/p250.svg | 3 +
src/assets/weapons/p90.svg | 3 +
src/assets/weapons/revolver.svg | 3 +
src/assets/weapons/sawedoff.svg | 3 +
src/assets/weapons/scar20.svg | 3 +
src/assets/weapons/sg556.svg | 3 +
src/assets/weapons/smokegrenade.svg | 7 +
src/assets/weapons/ssg08.svg | 3 +
src/assets/weapons/taser.svg | 3 +
src/assets/weapons/tec9.svg | 3 +
src/assets/weapons/trigger_hurt.svg | 3 +
src/assets/weapons/ump45.svg | 3 +
src/assets/weapons/usp_silencer.svg | 3 +
src/assets/weapons/usp_silencer_off.svg | 3 +
src/assets/weapons/world.svg | 3 +
src/assets/weapons/xm1014.svg | 3 +
src/fonts/Louis George Cafe.ttf | Bin 0 -> 32020 bytes
src/fonts/Rounded_Elegance.ttf | Bin 0 -> 164484 bytes
src/fonts/Stratum2/Stratum2 Bold Regular.ttf | Bin 0 -> 84484 bytes
src/fonts/Stratum2/Stratum2 Bold Regular.woff | Bin 0 -> 26216 bytes
src/fonts/montserrat.css | 90 ++++
src/fonts/montserrat/Montserrat-Black.ttf | Bin 0 -> 257552 bytes
.../montserrat/Montserrat-BlackItalic.ttf | Bin 0 -> 261732 bytes
src/fonts/montserrat/Montserrat-Bold.ttf | Bin 0 -> 244468 bytes
.../montserrat/Montserrat-BoldItalic.ttf | Bin 0 -> 249556 bytes
src/fonts/montserrat/Montserrat-ExtraBold.ttf | Bin 0 -> 244868 bytes
.../montserrat/Montserrat-ExtraBoldItalic.ttf | Bin 0 -> 249776 bytes
.../montserrat/Montserrat-ExtraLight.ttf | Bin 0 -> 242128 bytes
.../Montserrat-ExtraLightItalic.ttf | Bin 0 -> 246176 bytes
src/fonts/montserrat/Montserrat-Italic.ttf | Bin 0 -> 249088 bytes
src/fonts/montserrat/Montserrat-Light.ttf | Bin 0 -> 242068 bytes
.../montserrat/Montserrat-LightItalic.ttf | Bin 0 -> 246276 bytes
src/fonts/montserrat/Montserrat-Medium.ttf | Bin 0 -> 243180 bytes
.../montserrat/Montserrat-MediumItalic.ttf | Bin 0 -> 248044 bytes
src/fonts/montserrat/Montserrat-Regular.ttf | Bin 0 -> 245708 bytes
src/fonts/montserrat/Montserrat-SemiBold.ttf | Bin 0 -> 243816 bytes
.../montserrat/Montserrat-SemiBoldItalic.ttf | Bin 0 -> 249192 bytes
src/fonts/montserrat/Montserrat-Thin.ttf | Bin 0 -> 241436 bytes
.../montserrat/Montserrat-ThinItalic.ttf | Bin 0 -> 245372 bytes
src/fonts/stratum2.css | 6 +
src/index.css | 57 +++
src/index.tsx | 20 +
src/react-app-env.d.ts | 1 +
tsconfig.json | 26 ++
247 files changed, 7656 insertions(+)
create mode 100644 .env
create mode 100644 .env.development
create mode 100644 .gitignore
create mode 100644 LICENSE
create mode 100644 OpenBrowserPlugin.js
create mode 100644 README.md
create mode 100644 aco
create mode 100644 craco.config.js
create mode 100644 icon.png
create mode 100644 package.json
create mode 100644 preview.png
create mode 100644 public/hud.json
create mode 100644 public/index.html
create mode 100644 public/keybinds.json
create mode 100644 public/panel.json
create mode 100644 public/radar.css
create mode 100644 public/thumb.png
create mode 100644 settings.png
create mode 100644 sign.js
create mode 100644 src/App.tsx
create mode 100644 src/HUD/Camera/Camera.tsx
create mode 100644 src/HUD/Camera/Container.tsx
create mode 100644 src/HUD/Camera/index.scss
create mode 100644 src/HUD/Camera/mediaStream.ts
create mode 100644 src/HUD/Indicators/Armor.tsx
create mode 100644 src/HUD/Indicators/Bomb.tsx
create mode 100644 src/HUD/Indicators/Defuse.tsx
create mode 100644 src/HUD/Killfeed/Kill.tsx
create mode 100644 src/HUD/Killfeed/Killfeed.tsx
create mode 100644 src/HUD/Killfeed/killfeed.scss
create mode 100644 src/HUD/Layout/Layout.tsx
create mode 100644 src/HUD/MapSeries/MapSeries.tsx
create mode 100644 src/HUD/MapSeries/mapseries.scss
create mode 100644 src/HUD/MatchBar/MatchBar.tsx
create mode 100644 src/HUD/MatchBar/SeriesBox.tsx
create mode 100644 src/HUD/MatchBar/TeamLogo.tsx
create mode 100644 src/HUD/MatchBar/TeamScore.tsx
create mode 100644 src/HUD/MatchBar/WinIndicator.tsx
create mode 100644 src/HUD/MatchBar/matchbar.scss
create mode 100644 src/HUD/MatchOverview/MatchOverview.tsx
create mode 100644 src/HUD/Overview/Overview.tsx
create mode 100644 src/HUD/PauseTimeout/Pause.tsx
create mode 100644 src/HUD/PauseTimeout/Timeout.tsx
create mode 100644 src/HUD/PlayerOverview/PlayerOverview.tsx
create mode 100644 src/HUD/PlayerOverview/playeroverview.scss
create mode 100644 src/HUD/Players/Avatar.tsx
create mode 100644 src/HUD/Players/Observed.tsx
create mode 100644 src/HUD/Players/Player.tsx
create mode 100644 src/HUD/Players/TeamBox.tsx
create mode 100644 src/HUD/Players/observed.scss
create mode 100644 src/HUD/Players/players.scss
create mode 100644 src/HUD/Radar/LexoRadar/LexoRadar.tsx
create mode 100644 src/HUD/Radar/LexoRadar/LexoRadarContainer.tsx
create mode 100644 src/HUD/Radar/LexoRadar/assets/playerBg.png
create mode 100644 src/HUD/Radar/LexoRadar/assets/shootFire.png
create mode 100644 src/HUD/Radar/LexoRadar/assets/shootFire.zip
create mode 100644 src/HUD/Radar/LexoRadar/config.ts
create mode 100644 src/HUD/Radar/LexoRadar/grenades/bomb.png
create mode 100644 src/HUD/Radar/LexoRadar/grenades/firebomb.png
create mode 100644 src/HUD/Radar/LexoRadar/grenades/flash.png
create mode 100644 src/HUD/Radar/LexoRadar/grenades/frag.png
create mode 100644 src/HUD/Radar/LexoRadar/grenades/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/grenades/smoke.png
create mode 100644 src/HUD/Radar/LexoRadar/grenades/weapon_decoy.png
create mode 100644 src/HUD/Radar/LexoRadar/grenades/weapon_incgrenade.png
create mode 100644 src/HUD/Radar/LexoRadar/index.css
create mode 100644 src/HUD/Radar/LexoRadar/interface.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_ancient/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_ancient/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_anubis/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_anubis/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_cache/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_cache/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_dust2/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_dust2/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_inferno/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_inferno/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_mirage/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_mirage/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_nuke/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_nuke/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_overpass/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_overpass/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_train/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_train/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_vertigo/index.ts
create mode 100644 src/HUD/Radar/LexoRadar/maps/de_vertigo/radar.png
create mode 100644 src/HUD/Radar/LexoRadar/maps/index.ts
create mode 100644 src/HUD/Radar/Radar.tsx
create mode 100644 src/HUD/Radar/RadarMaps.tsx
create mode 100644 src/HUD/Radar/radar.scss
create mode 100644 src/HUD/SideBoxes/Money.tsx
create mode 100644 src/HUD/SideBoxes/SideBox.tsx
create mode 100644 src/HUD/SideBoxes/UtilityLevel.tsx
create mode 100644 src/HUD/SideBoxes/sideboxes.scss
create mode 100644 src/HUD/TeamOverview/TeamOverview.tsx
create mode 100644 src/HUD/TeamOverview/teamoverview.scss
create mode 100644 src/HUD/Timers/BombTimer.tsx
create mode 100644 src/HUD/Timers/Countdown.ts
create mode 100644 src/HUD/Timers/PlantDefuse.tsx
create mode 100644 src/HUD/Tournament/Ladder.tsx
create mode 100644 src/HUD/Tournament/Tournament.tsx
create mode 100644 src/HUD/Tournament/tournament.scss
create mode 100644 src/HUD/Trivia/Trivia.tsx
create mode 100644 src/HUD/Trivia/trivia.scss
create mode 100644 src/HUD/Weapon/Weapon.tsx
create mode 100644 src/HUD/countries.ts
create mode 100644 src/HUD/isSvg.ts
create mode 100644 src/api/actionManager.ts
create mode 100644 src/api/api.ts
create mode 100644 src/api/avatars.ts
create mode 100644 src/api/interfaces.ts
create mode 100644 src/assets/Icons.tsx
create mode 100644 src/assets/Weapons.tsx
create mode 100644 src/assets/bg.png
create mode 100644 src/assets/flash_assist.png
create mode 100644 src/assets/flashed_kill.png
create mode 100644 src/assets/headshot.png
create mode 100644 src/assets/images/bomb.svg
create mode 100644 src/assets/images/flashed_kill.svg
create mode 100644 src/assets/images/headshot.svg
create mode 100644 src/assets/images/icon_armor_full_default.svg
create mode 100644 src/assets/images/icon_armor_half_default.svg
create mode 100644 src/assets/images/icon_armor_half_helmet_default.svg
create mode 100644 src/assets/images/icon_armor_helmet_default.svg
create mode 100644 src/assets/images/icon_armor_none_default.svg
create mode 100644 src/assets/images/icon_blind.svg
create mode 100644 src/assets/images/icon_bomb_default.svg
create mode 100644 src/assets/images/icon_bomb_explosion_default.svg
create mode 100644 src/assets/images/icon_bullets_default.svg
create mode 100644 src/assets/images/icon_burning.svg
create mode 100644 src/assets/images/icon_c4_default.svg
create mode 100644 src/assets/images/icon_defuse_default.svg
create mode 100644 src/assets/images/icon_health_default.svg
create mode 100644 src/assets/images/icon_health_full_default.svg
create mode 100644 src/assets/images/icon_hourglass_default.svg
create mode 100644 src/assets/images/icon_microphone.svg
create mode 100644 src/assets/images/icon_pause_default.svg
create mode 100644 src/assets/images/icon_skull_default.svg
create mode 100644 src/assets/images/icon_timer_default.svg
create mode 100644 src/assets/images/logo_CT_default.png
create mode 100644 src/assets/images/logo_T_default.png
create mode 100644 src/assets/images/noscope.svg
create mode 100644 src/assets/images/smoke_kill.svg
create mode 100644 src/assets/images/suicide.svg
create mode 100644 src/assets/images/wallbang.svg
create mode 100644 src/assets/noscope_kill.png
create mode 100644 src/assets/smoke_kill.png
create mode 100644 src/assets/wallbang.png
create mode 100644 src/assets/weapons/ak47.svg
create mode 100644 src/assets/weapons/aug.svg
create mode 100644 src/assets/weapons/awp.svg
create mode 100644 src/assets/weapons/bayonet.svg
create mode 100644 src/assets/weapons/bizon.svg
create mode 100644 src/assets/weapons/c4.svg
create mode 100644 src/assets/weapons/cz75a.svg
create mode 100644 src/assets/weapons/deagle.svg
create mode 100644 src/assets/weapons/decoy.svg
create mode 100644 src/assets/weapons/elite.svg
create mode 100644 src/assets/weapons/famas.svg
create mode 100644 src/assets/weapons/fiveseven.svg
create mode 100644 src/assets/weapons/flashbang.svg
create mode 100644 src/assets/weapons/g3sg1.svg
create mode 100644 src/assets/weapons/galilar.svg
create mode 100644 src/assets/weapons/glock.svg
create mode 100644 src/assets/weapons/hegrenade.svg
create mode 100644 src/assets/weapons/hkp2000.svg
create mode 100644 src/assets/weapons/incgrenade.svg
create mode 100644 src/assets/weapons/inferno.svg
create mode 100644 src/assets/weapons/knife.svg
create mode 100644 src/assets/weapons/knife_bayonet.svg
create mode 100644 src/assets/weapons/knife_butterfly.svg
create mode 100644 src/assets/weapons/knife_canis.svg
create mode 100644 src/assets/weapons/knife_cord.svg
create mode 100644 src/assets/weapons/knife_css.svg
create mode 100644 src/assets/weapons/knife_falchion.svg
create mode 100644 src/assets/weapons/knife_flip.svg
create mode 100644 src/assets/weapons/knife_gut.svg
create mode 100644 src/assets/weapons/knife_gypsy_jackknife.svg
create mode 100644 src/assets/weapons/knife_karambit.svg
create mode 100644 src/assets/weapons/knife_m9_bayonet.svg
create mode 100644 src/assets/weapons/knife_outdoor.svg
create mode 100644 src/assets/weapons/knife_push.svg
create mode 100644 src/assets/weapons/knife_skeleton.svg
create mode 100644 src/assets/weapons/knife_stiletto.svg
create mode 100644 src/assets/weapons/knife_survival_bowie.svg
create mode 100644 src/assets/weapons/knife_t.svg
create mode 100644 src/assets/weapons/knife_tactical.svg
create mode 100644 src/assets/weapons/knife_ursus.svg
create mode 100644 src/assets/weapons/knife_widowmaker.svg
create mode 100644 src/assets/weapons/m249.svg
create mode 100644 src/assets/weapons/m4a1.svg
create mode 100644 src/assets/weapons/m4a1_silencer.svg
create mode 100644 src/assets/weapons/m4a1_silencer_off.svg
create mode 100644 src/assets/weapons/mac10.svg
create mode 100644 src/assets/weapons/mag7.svg
create mode 100644 src/assets/weapons/molotov.svg
create mode 100644 src/assets/weapons/mp5sd.svg
create mode 100644 src/assets/weapons/mp7.svg
create mode 100644 src/assets/weapons/mp9.svg
create mode 100644 src/assets/weapons/negev.svg
create mode 100644 src/assets/weapons/nova.svg
create mode 100644 src/assets/weapons/out.svg
create mode 100644 src/assets/weapons/p250.svg
create mode 100644 src/assets/weapons/p90.svg
create mode 100644 src/assets/weapons/revolver.svg
create mode 100644 src/assets/weapons/sawedoff.svg
create mode 100644 src/assets/weapons/scar20.svg
create mode 100644 src/assets/weapons/sg556.svg
create mode 100644 src/assets/weapons/smokegrenade.svg
create mode 100644 src/assets/weapons/ssg08.svg
create mode 100644 src/assets/weapons/taser.svg
create mode 100644 src/assets/weapons/tec9.svg
create mode 100644 src/assets/weapons/trigger_hurt.svg
create mode 100644 src/assets/weapons/ump45.svg
create mode 100644 src/assets/weapons/usp_silencer.svg
create mode 100644 src/assets/weapons/usp_silencer_off.svg
create mode 100644 src/assets/weapons/world.svg
create mode 100644 src/assets/weapons/xm1014.svg
create mode 100644 src/fonts/Louis George Cafe.ttf
create mode 100644 src/fonts/Rounded_Elegance.ttf
create mode 100644 src/fonts/Stratum2/Stratum2 Bold Regular.ttf
create mode 100644 src/fonts/Stratum2/Stratum2 Bold Regular.woff
create mode 100644 src/fonts/montserrat.css
create mode 100644 src/fonts/montserrat/Montserrat-Black.ttf
create mode 100644 src/fonts/montserrat/Montserrat-BlackItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-Bold.ttf
create mode 100644 src/fonts/montserrat/Montserrat-BoldItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-ExtraBold.ttf
create mode 100644 src/fonts/montserrat/Montserrat-ExtraBoldItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-ExtraLight.ttf
create mode 100644 src/fonts/montserrat/Montserrat-ExtraLightItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-Italic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-Light.ttf
create mode 100644 src/fonts/montserrat/Montserrat-LightItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-Medium.ttf
create mode 100644 src/fonts/montserrat/Montserrat-MediumItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-Regular.ttf
create mode 100644 src/fonts/montserrat/Montserrat-SemiBold.ttf
create mode 100644 src/fonts/montserrat/Montserrat-SemiBoldItalic.ttf
create mode 100644 src/fonts/montserrat/Montserrat-Thin.ttf
create mode 100644 src/fonts/montserrat/Montserrat-ThinItalic.ttf
create mode 100644 src/fonts/stratum2.css
create mode 100644 src/index.css
create mode 100644 src/index.tsx
create mode 100644 src/react-app-env.d.ts
create mode 100644 tsconfig.json
diff --git a/.env b/.env
new file mode 100644
index 0000000..79099d8
--- /dev/null
+++ b/.env
@@ -0,0 +1,2 @@
+GENERATE_SOURCEMAP=false
+BROWSER=none
\ No newline at end of file
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..fb1adaf
--- /dev/null
+++ b/.env.development
@@ -0,0 +1 @@
+PUBLIC_URL=/dev/
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1947a0b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+package-lock.json
+yarn.lock
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..63aefbf
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Lexogrine
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/OpenBrowserPlugin.js b/OpenBrowserPlugin.js
new file mode 100644
index 0000000..ddde924
--- /dev/null
+++ b/OpenBrowserPlugin.js
@@ -0,0 +1,49 @@
+const open = require('open');
+
+module.exports = class OpenBrowser {
+ constructor(options) {
+ if (typeof options === 'string') {
+ this.options = Object.assign(
+ {
+ hasOpen: false
+ },
+ {
+ url: options
+ }
+ );
+ } else {
+ this.options = Object.assign(
+ {
+ port: 8080,
+ host: 'localhost',
+ protocol: 'http:',
+ hasOpen: false
+ },
+ options
+ );
+ }
+ }
+
+ apply(compiler) {
+ const options = this.options;
+ let url;
+ let hasOpen = options.hasOpen;
+ if (options.protocol && !options.protocol.endsWith(':')) options.protocol += ':';
+ if (options.url) url = options.url;
+ else url = `${options.protocol}//${options.host}:${options.port}`;
+ if (compiler.hooks) {
+ compiler.hooks.afterEmit.tap('openBrowser', () => {
+ if (!hasOpen) open(url);
+ hasOpen = true;
+ this.options.hasOpen = true;
+ });
+ } else {
+ compiler.plugin('after-emit', (c, cb) => {
+ if (!hasOpen) open(url);
+ hasOpen = true;
+ this.options.hasOpen = true;
+ return cb();
+ });
+ }
+ }
+};
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..81dcd8a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,143 @@
+
+
+
LEXOGRINE HUD
+ 
+ Powered by « Lexogrine HUD Manager »
+
+
+# Lexogrine HUD
+
+
+
+Fullfledged example of the React HUD made for HUD Manager. It has:
+
+- Custom actions
+- Keybinds
+- Killfeed
+- Player cam feed
+- Custom Radar
+
+## Keybinds:
+### **Left Alt + S**
+>Makes radar smaller by 20px;
+### **Left Alt + B**
+>Makes radar bigger by 20px;
+### **Left Alt + T**
+>Shows trivia box
+### **Left Alt + M**
+>Toggles upcoming match box
+### **Left Alt + P**
+>Toggles player preview
+### **Left Alt + C**
+>Toggles camera feed
+### **Left Ctrl + B**
+>Make radar invisible
+
+## **Panel**
+## Trivia settings
+
+| Field|Description |
+|--|--|
+| Trivia title| `Text` |
+| Trivia content| `Text` |
+
+
+## Display settings
+
+
+| Field|Description |
+|--|--|
+| Left/right box's title| `Text` |
+| Left/right box's title| `Text` |
+| Left/right box's image logo| `Image file` |
+
+## Example settings
+
+
+
+## Preview
+
+
+
+# Download
+
+To download it just click here: [DOWNLOAD HUD](https://github.com/lexogrine/csgo-react-hud/releases/latest)
+
+# Instruction
+## Setting up
+Fork this repo, clone it, and then run `npm install` and `npm start`. HUD should start on the 3500 port. For this to work have HUD Manager opened so it will pass CS:GO data to the HUD.
+
+## Identifying HUD
+In `/public` directory edit hud.json so it fits you - fill HUD's name, author, version, specify the radar and killfeed functionalities. At the end replace the thumb.png with your icon :)
+
+## Building & distributing
+To build version to distribute and move around, in the root directory run `npm run pack`. It will create the zip file for distribution. Now you can just drag and drop this file into the HUD Managers upload area.
+
+## Signing
+
+To create Signed HUD to prevent at least from modyfing compiled Javascript files run `npm run sign`. It's the same as `npm run pack` command but with additional step of signing .js and .css files and hud.json.
+
+
+ ## File structure
+ The HUD is seperated into two parts - the API part, that connects to the HUD Manager API and communicate with it: `src/App.tsx` file and `src/api` directory. Usually, you don't want to play with it, so the whole runs without a problem.
+ The second part is the render part - `src/HUD`, `src/fonts` and `src/assets` are the directories you want to modify. In the `src/HUD` each element of the HUD is seperated into its own folder. Styles are kept in the `src/HUD/styles`. Names are quite self-explanatory, and to modify style of the element you should just find the styling by the file and class name.
+
+
+## `panel.json` API
+To get the incoming data from the HUD Manager, let's take a look at the `src/HUD/SideBoxes/SideBox.tsx` `componentDidMount()` method:
+```javascript
+import {configs} from './../../App';
+...
+configs.onChange((data:any) => {
+ if(!data) return;
+
+ const display = data.display_settings;
+
+ if(!display) return;
+
+ if(display[`${this.props.side}_title`]){
+ this.setState({title:display[`${this.props.side}_title`]})
+ }
+ if(display[`${this.props.side}_subtitle`]){
+ this.setState({subtitle:display[`${this.props.side}_subtitle`]})
+ }
+ if(display[`${this.props.side}_image`]){
+ this.setState({image:display[`${this.props.side}_image`]})
+ }
+});
+```
+To retrieve incoming data, you should just import `configs` object and then listen for the changes with `onChange` method. Usually you want to check for the specific data, as in the callback it will always serve the full form from the Manager.
+However it looks different in the case of action input. In this case, let's look at the `src/HUD/Trivia/Trivia.tsx`:
+```javascript
+import {configs, actions} from './../../App';
+...
+actions.on("triviaState", (state: any) => {
+ this.setState({show: state === "show"})
+});
+```
+For the action input we need to import the `actions` object and create listener with the parameter on it.
+## `keybinds.json` API
+Keybinds API works in very similiar to `panel.json` action API. One more time the example will be from `src/HUD/Trivia/Trivia.tsx`:
+```javascript
+import {configs, actions} from './../../App';
+...
+actions.on("toggleTrivia", () => {
+ this.setState({show: !this.state.show})
+});
+```
+Keybinds listener works on the same object as action input, in this case however there are no parameter to retrieve.
+
+## Killfeed
+Because our `csgogsi` has the ability to process input from HLAE's MIRV, listening for kills is very easy. We can see than in `src/HUD/Killfeed/Killfeed.tsx`:
+```javascript
+componentDidMount() {
+ GSI.on("kill", kill => {
+ this.addKill(kill);
+ });
+}
+```
+The Killfeed component basically just keeps kills in the state during the round, and after the round it cleans the state. Kills have CSS animation, that makes them gently show, and after a few seconds disappear, the experience is very smooth. You can fiddle with the styling in the `killfeed.css`
+This killfeed detects who killed whom, if there was an assist (flash assist as well), used weapon, headshot and wallbang.
+
+## Radar
+Radar is custom React-based component, made by Hubert Walczak, and is easily editable from css.
\ No newline at end of file
diff --git a/aco b/aco
new file mode 100644
index 0000000..d48558e
--- /dev/null
+++ b/aco
@@ -0,0 +1,8 @@
+{"map":"de_train","areas":[{"name":"areaA","polygonCorners":[[151.55847926267285,46.0799999999998],[337.3234562211982,-245.0100000000002],[978.2126267281108,17.909999999999798],[838.8888940092168,327.7799999999998]],"configs":[],"priority":0},{"name":"siteB","polygonCorners":[[-359.2952073732719,-1043.16],[-359.2952073732719,-1409.3700000000001],[393.05294930875584,-1465.71],[374.4764516129033,-1033.7700000000002]],"configs":[],"priority":0}],"_id":"6jYobxlAez134aOT"}
+{"map":"de_mirage","areas":[{"name":"T_SPAWN_B","polygonCorners":[[176.3284,691.3078],[186.2224,301.0953],[1393.2881,231.0572],[1403.182,711.3187]],"configs":["spec_mode 5;spec_mode 6;spec_goto 1313.0 421.7 73.9 22.2 -124.2;spec_lerpto 1134.3 662.2 79.3 23.2 -156.0 4 4"],"priority":0},{"name":"T_SPAWN","polygonCorners":[[1101.7962,100.5449],[1443.0434,120.2615],[1453.08,-392.3705],[1121.8695,-382.5122]],"configs":["spec_mode 5;spec_mode 6;spec_goto 1278.9 655.6 -211.9 11.2 -88.8;spec_lerpto 1271.7 166.9 -52.3 11.0 -91.6 8 8","spec_mode 5;spec_mode 6;spec_goto 1084.7 181.2 349.6 65.6 -73.6; spec_lerpto 1295.3 -791.6 323.8 52.1 96.5 15 15;","spec_mode 5;spec_mode 6;spec_goto 1125.1 -1179.0 12.6 12.1 77.8; spec_lerpto 1376.7 -703.9 -39.9 6.9 102.85 5 5;"],"priority":0},{"name":"T_SPAWN_A","polygonCorners":[[713.7751,-564.6353],[1393.004,-564.6353],[1422.97,-1508.112],[673.8205,-1448.524]],"configs":["spec_mode 5;spec_mode 6;spec_goto 1278.9 655.6 -211.9 11.2 -88.8;spec_lerpto 1271.7 166.9 -52.3 11.0 -91.6 4 4","spec_mode 5;spec_mode 6;spec_goto 1286.5 -977.1 99.7 22.2 -155.5; spec_lerpto 794.2 -1085.7 11.5 19.5 -118.8 5 5;"],"priority":0},{"name":"ctSpawn","polygonCorners":[[-2016.6489523809526,-1736.5326666666667],[-2046.4722380952383,-2004.6786666666667],[-1440.0654285714288,-2054.3353333333334],[-1430.1243333333337,-1567.7]],"configs":["CT SPAWN: spec_mode 5;spec_mode 6;spec_goto -995.2 -2655.4 118.8 18.6 136.9; spec_lerpto -2028.2 -2334.6 161.5 34.2 68.0 15 15;"],"priority":0},{"name":"topMid","polygonCorners":[[150.50980952380934,-167.38199999999992],[160.45090476190458,-971.8199999999999],[577.9769047619046,-961.8886666666666],[538.2125238095236,-48.20599999999992],[180.33309523809507,41.17600000000009]],"configs":["spec_mode 5;spec_mode 6;spec_goto -244.9 -547.0 213.9 31.7 17.4; spec_lerpto 491.5 -942.7 123.9 31.2 124.2 10 10;"],"priority":0},{"name":"stairsArea","polygonCorners":[[-475.77919047619065,-1120.79],[-386.30933333333354,-1617.3566666666666],[-793.8942380952383,-1587.5626666666667],[-774.0120476190478,-1289.6226666666666],[-764.0709523809526,-1180.378]],"configs":["spec_mode 5;spec_mode 6;spec_goto -425.7 -1817.0 106.7 22.3 115.9; spec_lerpto -837.8 -1386.0 -37.9 14.3 21.0 5 5;","spec_mode 5;spec_mode 6;spec_goto -883.4 -1313.5 -27.6 8.5 -25.9; spec_lerpto -633.6 -1920.3 -29.0 5.7 68.3 5 5;"],"priority":0},{"name":"bombsiteAm","polygonCorners":[[-78.13538095238113,-2411.8633333333332],[-764.0709523809526,-2362.206666666667],[-754.1298571428573,-1518.0433333333333],[-8.547714285714463,-1369.0733333333333]],"configs":["spec_mode 5;spec_mode 6;spec_goto -733.5 -2334.7 157.2 27.2 36.1; spec_lerpto -629.3 -1559.9 329.8 39.1 -51.2 5 5;","spec_mode 5;spec_mode 6;spec_goto 158.8 -1571.9 96.3 17.6 -152.1; spec_lerpto -803.1 -1621.9 158.3 19.8 -38.8 5 5;"],"priority":0},{"name":"palaceDeski","polygonCorners":[[-58.25319047619065,-1716.67],[-78.13538095238113,-2382.0693333333334],[190.2741904761903,-2382.0693333333334],[220.09747619047602,-1706.7386666666666]],"configs":["spec_mode 5;spec_mode 6;spec_goto -168.0 -1862.4 -70.4 8.5 -24.1; spec_lerpto -210.1 -2082.5 11.0 7.0 -3.4 5 5;"],"priority":0},{"name":"palaceInside","polygonCorners":[[259.861857142857,-1915.2966666666666],[259.861857142857,-2392.000666666667],[1124.7371428571428,-2382.0693333333334],[1134.678238095238,-1905.3653333333334]],"configs":["spec_mode 5;spec_mode 6;spec_goto 1032.8 -2013.3 30.5 3.0 -157.9; spec_lerpto 658.0 -2348.4 29.4 -1.0 146.3 5 5;"],"priority":0},{"name":"rampSetup","polygonCorners":[[269.8029523809522,-1379.0046666666667],[239.9796666666665,-1766.3266666666666],[836.4453809523808,-1736.5326666666667],[886.150857142857,-981.7513333333333],[577.9769047619046,-1011.5453333333334]],"configs":["spec_mode 5;spec_mode 6;spec_goto 234.0 -1463.4 -113.1 4.1 -68.6; spec_lerpto 583.3 -1687.6 -144.5 4.6 67.4 5 5;","spec_mode 5;spec_mode 6;spec_goto 743.8 -1066.2 133.7 52.4 -103.2; spec_lerpto 592.7 -1700.6 6.1 36.9 68.0 5 5;","spec_mode 5;spec_mode 6;spec_goto 980.0 -975.0 74.6 21.5 -115.7; spec_lerpto 732.6 -967.8 130.0 24.1 -95.0 5 5;"],"priority":0},{"name":"jungle","polygonCorners":[[-1271.0668095238098,-1160.5153333333333],[-1310.8311904761906,-1577.6313333333333],[-734.2476666666669,-1567.7],[-754.1298571428573,-1220.1033333333332]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1128.8 -491.1 -47.8 10.3 -89.8; spec_lerpto -1225.4 -1285.7 -111.7 0.7 -30.0 5 5;"],"priority":0},{"name":"kitchen","polygonCorners":[[-2424.2338571428572,-207.10733333333326],[-2434.1749523809526,-683.8113333333333],[-1479.8298095238097,-733.468],[-1489.770904761905,-226.96999999999994]],"configs":["spec_mode 5;spec_mode 6;spec_goto -2341.3 -400.1 -16.3 29.1 -48.4; spec_lerpto -2332.6 -671.4 -45.6 10.0 22.3 5 5;"],"priority":0},{"name":"apsOut","polygonCorners":[[-1927.1790952380954,845.6140000000001],[-1887.4147142857146,637.0560000000002],[-1211.4202380952383,607.2620000000002],[-1161.714761904762,339.1160000000001],[-803.8353333333336,319.25333333333344],[-883.3640952380954,865.4766666666668]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1392.9 727.3 0.0 2.8 -1.8; spec_lerpto -2471.5 674.4 139.4 23.1 10.6 5 5;"],"priority":0},{"name":"bench","polygonCorners":[[-2682.7023333333336,587.3993333333334],[-2642.9379523809525,110.69533333333342],[-2374.528380952381,100.76400000000008],[-2354.646190476191,587.3993333333334]],"configs":["spec_mode 5;spec_mode 6;spec_goto -2622.9 533.9 -16.7 22.7 -33.4; spec_lerpto -2647.1 149.6 -47.6 11.8 22.4 5 5;"],"priority":0},{"name":"edward","polygonCorners":[[-1678.6517142857144,557.6053333333334],[-1201.479142857143,527.8113333333334],[-1181.5969523809526,319.25333333333344],[-754.1298571428573,319.25333333333344],[-724.3065714285716,1.4506666666667483],[-1658.7695238095241,110.69533333333342]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1067.7 140.8 73.8 26.9 140.0; spec_lerpto -1856.5 156.7 -34.2 16.1 27.6 5 5;"],"priority":0},{"name":"wyskokZaps","polygonCorners":[[-2404.351666666667,835.6826666666668],[-2404.351666666667,597.3306666666667],[-2175.706476190476,478.1546666666668],[-1847.6503333333335,458.2920000000001],[-1718.4160952380955,885.3393333333335]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1801.0 449.5 137.2 24.8 143.3; spec_lerpto -2647.1 393.7 232.2 34.4 4.4 5 5;"],"priority":0},{"name":"under","polygonCorners":[[-1092.1270952380955,537.7426666666668],[-923.1284761904764,537.7426666666668],[-923.1284761904764,-842.7126666666667],[-1092.1270952380955,-832.7813333333334]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1006.1 427.3 -259.7 5.7 -87.9; spec_lerpto -1008.5 -269.5 -317.9 -10.2 -86.8 5 5;","spec_mode 5;spec_mode 6;spec_goto -876.8 193.3 -307.6 2.1 -146.4; spec_lerpto -805.7 -70.9 -312.6 0.4 143.5 5 5;"],"priority":0},{"name":"midlawka","polygonCorners":[[-1082.1860000000001,-524.91],[-436.01480952380973,-534.8413333333333],[-436.01480952380973,-822.8499999999999],[-1092.1270952380955,-852.644]],"configs":["spec_mode 5;spec_mode 6;spec_goto -756.6 -420.1 -18.6 29.2 -128.4; spec_lerpto -456.5 -760.5 9.5 23.8 151.8 5 5;","spec_mode 5;spec_mode 6;spec_goto -519.3 -494.9 -119.0 9.6 -121.3; spec_lerpto -820.1 -455.4 27.7 34.5 -112.0 5 5;"],"priority":0},{"name":"ladder","polygonCorners":[[-1231.302428571429,-18.41199999999992],[-1241.243523809524,-346.14599999999996],[-863.481904761905,-366.0086666666666],[-883.3640952380954,-28.343333333333252]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1209.8 -63.4 73.7 22.6 -33.4; spec_lerpto -1014.8 -53.1 -1.6 13.7 -123.0 5 5;"],"priority":0},{"name":"setupB","polygonCorners":[[-972.8339523809526,617.1933333333335],[-485.7202857142859,686.7126666666668],[-475.77919047619065,954.8586666666667],[-48.31209523809542,934.9960000000001],[-78.13538095238113,339.1160000000001],[-982.7750476190478,349.0473333333334]],"configs":["spec_mode 5;spec_mode 6;spec_goto -247.5 937.2 239.1 41.3 -139.2; spec_lerpto -159.4 374.0 210.9 36.9 150.3 5 5;"],"priority":0},{"name":"tv","polygonCorners":[[-247.13400000000019,944.9273333333334],[-227.2518095238097,726.4380000000001],[786.7399047619047,716.5066666666668],[746.9755238095237,915.1333333333334]],"configs":["spec_mode 5;spec_mode 6;spec_goto -456.1 757.0 76.4 21.4 6.9; spec_lerpto 30.4 804.1 -59.1 6.4 1.8 5 5;"],"priority":0},{"name":"short","polygonCorners":[[-933.0695714285716,-8.480666666666586],[-704.4243809523812,-38.27466666666659],[90.86323809523792,-306.4206666666666],[61.03995238095221,-514.9786666666666],[-952.9517619047621,-505.04733333333326]],"configs":["spec_mode 5;spec_mode 6;spec_goto -880.2 -145.4 88.0 31.7 -52.7; spec_lerpto -787.5 -806.6 77.4 22.2 66.1 5 5;"],"priority":0},{"name":"midCenter","polygonCorners":[[-406.19152380952397,-326.28333333333325],[-396.25042857142876,-961.8886666666666],[289.6851428571427,-961.8886666666666],[289.6851428571427,-256.76399999999995]],"configs":["spec_mode 5;spec_mode 6;spec_goto 585.6 -445.1 223.7 31.3 -169.4; spec_lerpto -183.3 -810.3 -64.7 11.6 156.8 5 5;"],"priority":0},{"name":"windowAndUnder","polygonCorners":[[-1300.8900952380955,-405.7339999999999],[-1310.8311904761906,-793.0559999999999],[-873.4230000000002,-812.9186666666666],[-863.481904761905,-415.66533333333325]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1248.1 -530.9 -71.5 9.4 -16.0; spec_lerpto -1232.2 -765.2 -68.7 11.5 28.9 5 5;"],"priority":0},{"name":"ticketCt","polygonCorners":[[-1360.5366666666669,-2064.266666666667],[-1549.4174761904765,-2441.6573333333336],[-803.8353333333336,-2640.2840000000006],[-833.6586190476193,-2203.3053333333332]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1847.6 -2102.1 -39.4 16.8 -14.4; spec_lerpto -1471.8 -2231.8 -45.6 13.4 -23.0 5 5;"],"priority":0},{"name":"kitchenEntrance","polygonCorners":[[-1768.1215714285715,-703.674],[-1758.1804761904764,-1607.4253333333334],[-1420.1832380952383,-1508.112],[-1310.8311904761906,-812.9186666666666]],"configs":["spec_mode 5;spec_mode 6;spec_goto -1596.2 -954.9 244.1 77.9 40.9; spec_lerpto -1704.6 -1350.2 111.2 38.5 62.7 5 5;"],"priority":0},{"name":"bombSiteBArea","polygonCorners":[[-2384.4694761904766,557.6053333333334],[-2374.528380952381,-256.76399999999995],[-1519.5941904761908,-266.6953333333333],[-1529.535285714286,607.2620000000002]],"configs":["spec_mode 5;spec_mode 6;spec_goto -2335.3 -178.7 -87.7 4.7 67.4; spec_lerpto -1587.3 -222.8 209.8 30.2 129.9 5 5;"],"priority":0}],"_id":"M7JVzXFDaBJqKgfv"}
+{"map":"de_vertigo","areas":[{"name":"vgjvg","polygonCorners":[[-2721.9782056451613,-1799.0568774703559],[-2691.760826612903,-2525.5937944664033],[-2087.413245967742,-2515.503003952569],[-2137.775544354839,-1778.8752964426878]],"configs":[],"priority":0}],"_id":"SKUivlXVDaw41YQj"}
+{"map":"de_cache","areas":[{"name":"dddd","polygonCorners":[[438.44240223463703,-1169.6214453781515],[416.5955493482311,-1588.8681344537817],[1235.8525325884543,-1566.2061512605046],[1203.0822532588454,-1203.6144201680675]],"configs":["asdfsafd"],"priority":0},{"name":"vent","polygonCorners":[[372.90184357541915,76.78763025210057],[361.9784171322162,-229.14914285714312],[809.8389013035383,-229.14914285714312],[798.9154748603353,122.1115966386552],[602.2937988826817,507.3653109243695]],"configs":[],"priority":0}],"_id":"UG43eWK17T5rgwV9"}
+{"map":"de_nuke","areas":[{"name":"silo","polygonCorners":[[-174.7934726688099,-1440.4006206896552],[-202.61743837084634,-1738.975517241379],[117.35816720257269,-1874.6913793103447],[326.03790996784596,-1711.8323448275862],[326.03790996784596,-1508.258551724138],[200.830064308682,-1358.971103448276],[33.88627009646338,-1345.3995172413793]],"configs":[],"priority":0},{"name":"BombSiteA","polygonCorners":[[256.4779957127549,-259.67262068965505],[228.65403001071846,-883.9655862068965],[1049.4610182207934,-856.8224137931035],[1049.4610182207934,-246.10103448275854]],"configs":[],"priority":0}],"_id":"WGsUR0Nd1ecSLKWS"}
+{"map":"de_inferno","areas":[{"name":"ct","polygonCorners":[[-1873.519931972789,951.4766470588233],[-1834.3366213151928,-162.5805294117647],[-1266.1786167800453,-74.62864705882355],[-1364.1368934240363,1029.6560980392155]],"configs":[],"priority":0}],"_id":"cbOGJKqsrx6dzLPq"}
+{"map":"de_overpass","areas":[{"name":"PLAYGROUND","polygonCorners":[[-2970.27947368421,-2255.4509063745018],[-3053.451619433198,-2502.5232569721115],[-2107.3684615384614,-2574.5860258964144],[-2065.7823886639676,-2255.4509063745018]],"configs":[],"priority":0}],"_id":"fztBzTnGZVjgCmlM"}
+{"map":"de_dust2","areas":[{"name":"bSite","polygonCorners":[[-2164.4671328671325,3209.2467811158795],[-2199.5807925407926,2471.643862660944],[-1330.5177156177156,2454.0818884120167],[-1312.9608857808857,2805.3213733905577]],"configs":["spec_mode 5;spec_mode 6;spec_goto -880.2 -145.4 88.0 31.7 -52.7; spec_lerpto -787.5 -806.6 77.4 22.2 66.1 5 5;"],"priority":0}],"_id":"naE9a8T3gdiu6iK1"}
diff --git a/craco.config.js b/craco.config.js
new file mode 100644
index 0000000..4d6f774
--- /dev/null
+++ b/craco.config.js
@@ -0,0 +1,45 @@
+const path = require('path');
+const fs = require('fs');
+const homedir = require('os').homedir();
+const internalIp = require('internal-ip');
+const OpenBrowserPlugin = require('./OpenBrowserPlugin');
+
+const pathToConfig = path.join(process.env.APPDATA || path.join(homedir, '.config'), 'hud-manager', 'databases', 'config');
+let port = 1349;
+
+const getPort = () => {
+ if(!fs.existsSync(pathToConfig)){
+ console.warn('LHM Config file unavailable');
+ return port;
+ }
+
+ try {
+ const config = JSON.parse(fs.readFileSync(pathToConfig, 'utf-8'));
+
+ if(!config.port){
+ console.warn('LHM Port unavailable');
+ }
+
+ console.warn('LHM Port detected as', config.port);
+ return config.port;
+
+ } catch {
+ console.warn('LHM Config file invalid');
+ return port;
+ }
+}
+
+port = getPort();
+
+module.exports = {
+ devServer: {
+ port: 3500,
+ open: false
+ },
+ webpack: {
+ configure: (webpackConfig) => {
+ webpackConfig.plugins.push(new OpenBrowserPlugin({ url: `http://${internalIp.v4.sync()}:${port}/development/`}))
+ return webpackConfig;
+ }
+ }
+};
\ No newline at end of file
diff --git a/icon.png b/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..95bc49a4637b396adee14635dff40d83fa24f822
GIT binary patch
literal 33887
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
DX8=dx
literal 0
HcmV?d00001
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ec89e64
--- /dev/null
+++ b/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "lexogrine_hud",
+ "version": "1.0.0",
+ "homepage": "./",
+ "private": true,
+ "dependencies": {
+ "@craco/craco": "^5.7.0",
+ "@types/jest": "24.0.19",
+ "@types/node": "16.11.20",
+ "@types/react": "17.0.38",
+ "@types/react-dom": "17.0.11",
+ "@types/simple-peer": "^9.11.3",
+ "buffer": "^6.0.3",
+ "csgogsi-socket": "^2.7.1",
+ "query-string": "^6.12.1",
+ "react": "^17.0.2",
+ "react-dom": "^17.0.2",
+ "react-scripts": "5.0.0",
+ "simple-peer": "^9.11.0",
+ "simple-websockets": "^1.1.0",
+ "typescript": "^4.5.4",
+ "uuid": "^8.3.2"
+ },
+ "license": "GPL-3.0",
+ "scripts": {
+ "zip": "npm-build-zip",
+ "start": "craco start",
+ "build": "react-scripts build",
+ "test": "react-scripts test",
+ "eject": "react-scripts eject",
+ "pack": "npm run build && npm run zip",
+ "sign": "npm run build && node sign.js && npm-build-zip --name=signed"
+ },
+ "eslintConfig": {
+ "extends": "react-app"
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "devDependencies": {
+ "@types/history": "^4.7.5",
+ "@types/socket.io-client": "^1.4.32",
+ "@types/uuid": "^8.3.1",
+ "internal-ip": "^6.2.0",
+ "jsonwebtoken": "^8.5.1",
+ "npm-build-zip": "^1.0.2",
+ "open": "^8.0.2",
+ "sass": "^1.32.5",
+ "socket.io-client": "^2.4.0"
+ }
+}
diff --git a/preview.png b/preview.png
new file mode 100644
index 0000000000000000000000000000000000000000..3516f8624014d8929a3d7473c813dddb485cd4cd
GIT binary patch
literal 2501507
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