diff --git a/rcongui_public/src/i18n/locales/en/translation.json b/rcongui_public/src/i18n/locales/en/translation.json
index cfefba896..a928c34e8 100644
--- a/rcongui_public/src/i18n/locales/en/translation.json
+++ b/rcongui_public/src/i18n/locales/en/translation.json
@@ -31,6 +31,23 @@
"weekday": "Weekday"
},
"streaming": {
+ "streamerView": "Streamer View",
+ "tutorial": {
+ "title": "Tutorial",
+ "introduction": "This is a tool for people, who want to stream Hell Let Loose.",
+ "stepByStep": "Here is a step-by-step guide to integrate the scrolling banner into your stream:",
+ "openOBS": "open OBS",
+ "createSource": "Add source -> Browser -> Create",
+ "enterFollowingValues": "Enter the following values",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height",
+ "customCSS": "Custom CSS (optional)",
+ "adjustColors": "Adjust the css colors as you like either with hex values or color names.",
+ "andSave": "and save",
+ "crop": "Crop by pressing ALT key and dragging sides of source",
+ "changeSettings": "Right click on source -> 'interact' to change settings"
+ },
"playerCount": "Player count",
"cycleDuration": "Cycle Duration",
"pauseWidth": "Pause width",
diff --git a/rcongui_public/src/pages/home/streaming/index.tsx b/rcongui_public/src/pages/home/streaming/index.tsx
index 1bf43cb2b..33b3a95a0 100644
--- a/rcongui_public/src/pages/home/streaming/index.tsx
+++ b/rcongui_public/src/pages/home/streaming/index.tsx
@@ -7,6 +7,15 @@ import {useTranslation} from "react-i18next";
import {useOutletContext} from "react-router";
import {GameLiveOutletContext} from "@/pages/home/layout";
import SelectBox from "@/components/ui/select-box";
+import {
+ Accordion,
+ AccordionContent,
+ AccordionItem,
+ AccordionTrigger
+} from "@/components/ui/accordion";
+import {AccordionHeader} from "@radix-ui/react-accordion";
+import {GraduationCap} from "lucide-react";
+import StreamTutorial from "@/pages/home/streaming/stream-tutorial";
export default function Streaming() {
const { t } = useTranslation('translation', {keyPrefix: 'streaming'});
@@ -31,7 +40,21 @@ export default function Streaming() {
);
return
-
+
{t("streamerView")}
+
+
+
+
+ {t('tutorial.title')}
+
+
+
+
+
+
+
+ {/*bg background necessary so the background stays within obs*/}
+
{t('playerCount')} ({playerAmount})
diff --git a/rcongui_public/src/pages/home/streaming/stream-banner.tsx b/rcongui_public/src/pages/home/streaming/stream-banner.tsx
index d11227fcf..de2484918 100644
--- a/rcongui_public/src/pages/home/streaming/stream-banner.tsx
+++ b/rcongui_public/src/pages/home/streaming/stream-banner.tsx
@@ -26,7 +26,7 @@ export default function StreamBanner({ playerAmount, settings }: StreamBannerPro
.sort((a, b) => b.kills - a.kills)
.slice(0, playerAmount);
- return
+ return
@@ -40,12 +40,12 @@ interface StreamProps {
const Stream = ({ players, settings }: StreamProps) => {
return
-
+
{settings.text}
{players.map((player =>
-
+
{player.kills}
{settings.showAvatars && player.steaminfo?.profile?.avatar &&
@@ -56,11 +56,11 @@ const Stream = ({ players, settings }: StreamProps) => {
}
-
+
{player.player}
- {settings.showWeapons &&
+ {settings.showWeapons &&
{
Object.entries(player.weapons)
.sort(([n1, v1], [n2, v2]) => v2 - v1)[0]?.[0]
diff --git a/rcongui_public/src/pages/home/streaming/stream-tutorial.tsx b/rcongui_public/src/pages/home/streaming/stream-tutorial.tsx
new file mode 100644
index 000000000..515e028cf
--- /dev/null
+++ b/rcongui_public/src/pages/home/streaming/stream-tutorial.tsx
@@ -0,0 +1,103 @@
+import React from 'react';
+import { useTranslation } from "react-i18next";
+import { siObsstudio } from "simple-icons";
+import { SimpleIcon } from "@/components/simple-icon";
+
+const StreamTutorial = () => {
+ const { t } = useTranslation('translation', { keyPrefix: 'streaming.tutorial' });
+
+ const cssValue = `.stream-banner {
+ background-color: black !important;
+}
+
+.stream-banner-text {
+ color: #ffa500 !important;
+}
+
+.stream-banner-kills {
+ color: red !important;
+}
+
+.stream-banner-player {
+ color: #6a5acd !important;
+}
+
+.stream-banner-weapon {
+ color: #6a5acd !important;
+}`;
+
+ const steps = [
+ {
+ id: 'obs',
+ content: t("openOBS"),
+ icon:
+ },
+ {
+ id: 'source',
+ content: t("createSource")
+ },
+ {
+ id: 'values',
+ content: t("enterFollowingValues"),
+ subContent: (
+
+
+ {t("url")}:
+ {window.location.href}
+
+
+ {t("width")}:
+ 1000
+
+
+ {t("height")}:
+ 800
+
+
{t("customCSS")}:
+
+ {cssValue}
+
+
+ {t("adjustColors")}
+
+
{t("andSave")}
+
+ )
+ },
+ {
+ id: 'crop',
+ content: t("crop")
+ },
+ {
+ id: 'settings',
+ content: t("changeSettings")
+ }
+ ];
+
+ return (
+
+
+
+
{t("introduction")}
+
{t("stepByStep")}
+
+
+
+ {steps.map((step, index) => (
+ -
+
+ {index + 1}.
+ {step.content}
+ {step.icon}
+
+ {step.subContent}
+
+ ))}
+
+
+
+ );
+};
+
+export default StreamTutorial;