Skip to content

samouczek#441

Draft
nikitosych wants to merge 126 commits intopolonium14:masterfrom
nikitosych:intro
Draft

samouczek#441
nikitosych wants to merge 126 commits intopolonium14:masterfrom
nikitosych:intro

Conversation

@nikitosych
Copy link
Member

@nikitosych nikitosych commented Jan 31, 2026

aka "Wprowadzenie"

Informacje o PR

Niekompletna część systemu samouczka po stronie klienta. Infrastruktura po stronie klienta jest niby gotowa, sporo roboty jest z częścią serwerową.

Backend będzie opierał się na space-wizards#41602 (project batfly)
oraz na https://hedgedoc.spacestation14.com/kTStQRSmTP-FlQIF0dN4aQ?view

  • overlay
  • podstawowe wyświetlanie wskazówek na overlayu
  • możliwość wyświetlania animowanych obrazów na wskazówkach
  • skalowalność poza grą
  • skalowalność podczas gry
  • sekwencyjne pslanowanie overlayów oraz wskazówek
  • kroki wprowadzenia oparte na prototypach i smart-encjach
  • śledzenie kroków wprowadzenia, IntroductionManager
  • centralizowane sterowanie UI wprowadzenia
  • zapisywanie postępów
  • część serwerowa
    • merge z https://github.com/space-wizards/space-station-14/pull/41602
    • możliwość przejścia na inny serwer on-prompt w celu wprowadzenia się w mechanikę gry
    • synchronizacja postępu między klientem a serwerem
    • sterowanie wprowadzeniem z poziomu serwera
    • mapa
  • hedgedoc
  • brak błędów testów CI
  • testowania staging

Refactor note: Cały kod został przeniesiony z Content.Shared do Content.Server.


Changelog
TODO

Media

TutorialTest:
image

nikitosych and others added 30 commits November 15, 2025 03:41
- Zaktualizowano interfejs użytkownika BanPanel, dodając funkcję wyboru rundy i resetowania.
- Zmodyfikowano polecenia związane z banowaniem, aby akceptowały i obsługiwały informacje o rundach.
- Ulepszono metody banowania, aby przechowywać dane dotyczące rund.
- Zaktualizowano pliki lokalizacyjne dla komunikatów związanych z rundami.
- Zaktualizowano interfejs użytkownika BanPanel, dodając funkcję wyboru rundy i resetowania.
- Zmodyfikowano polecenia związane z banowaniem, aby akceptowały i obsługiwały informacje o rundach.
- Ulepszono metody banowania, aby przechowywać dane dotyczące rund.
- Zaktualizowano pliki lokalizacyjne dla komunikatów związanych z rundami.
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 52 out of 58 changed files in this pull request and generated 11 comments.

{
/// <summary>
/// The list of spawn profiles available. The lobby can be configured to allow the player to pick one of the options.
/// If no player choice is made (or possible), the first prototoype will be chosen.
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in comment: prototoype -> prototype.

Suggested change
/// If no player choice is made (or possible), the first prototoype will be chosen.
/// If no player choice is made (or possible), the first prototype will be chosen.

Copilot uses AI. Check for mistakes.
var name = $"{StepId}-fallback";
IntroUi.PlanOverlay(name);

var bubble = new IntroBubble(Loc.GetString("intro-proceed-prompt-message-fallback"))
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The fallback overlay uses localization key intro-proceed-prompt-message-fallback, but the locale file defines intro-proceed-prompt-fallback-message. As-is, this will show a missing-loc placeholder; please align the key name between code and FTL.

Suggested change
var bubble = new IntroBubble(Loc.GetString("intro-proceed-prompt-message-fallback"))
var bubble = new IntroBubble(Loc.GetString("intro-proceed-prompt-fallback-message"))

Copilot uses AI. Check for mistakes.
Comment on lines +44 to +47
intro-proceed-prompt-message-1 = Świetnie! Już nauczyłeś się niemal rzeczy!
intro-welcome-begin-question-message = [bold]Czy chcesz teraz przejść do praktycznej części samouczka, gdzie będziesz mógł wypróbować swoje umiejętności na symulowanej stacji kosmicznej?[/bold]
intro-proceed-prompt-agree-button = Tak!
intro-proceed-prompt-disagree-button = Może później
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file defines intro-welcome-begin-question-message a second time for the proceed prompt (line 45), which will override the earlier welcome-step text and likely triggers FTL duplicate-key errors depending on loader settings. Please introduce a distinct key for the proceed-prompt question (and keep the original welcome key unique).

Copilot uses AI. Check for mistakes.
Comment on lines +28 to +33
IntroUi.PlanOverlay(StepId);
var welcomeBubble = new IntroBubble(
Loc.GetString("intro-welcome-message-1"),
Loc.GetString("intro-welcome-message-2"),
Loc.GetString("intro-welcome-message-3"))
{
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new client introduction step uses many intro-* localization keys (e.g. intro-welcome-message-1), but this PR doesn't add en-US translations for them. English clients will see raw key names; please add an en-US FTL for the introduction strings (similar to the pl-PL file).

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +5
id: Trainee
name: job-name-trainee
description: job-description-trainee
playTimeTracker: JobTrainee
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

description: job-description-trainee is referenced by the new job, but there is no job-description-trainee entry in the pl-PL locale files. Add the missing pl-PL localization key (or point the job to an existing localized description key).

Copilot uses AI. Check for mistakes.
Comment on lines +66 to +80
Text = Loc.GetString("intro-welcome-begin-question-message"),
ModulateSelfOverride = Color.Black,
HorizontalAlignment = Control.HAlignment.Center,
};

var agreeButton = new Button
{
Text = Loc.GetString("intro-welcome-begin-agree-button"),
HorizontalAlignment = Control.HAlignment.Center,
Margin = new Thickness(0, 8, 0, 0),
};

var disagreeButton = new Button
{
Text = Loc.GetString("intro-welcome-begin-disagree-button"),
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PromptOverlay() reuses the welcome prompt localization keys (intro-welcome-begin-...) for the practical/tutorial-server prompt. This makes the text/buttons incorrect and couples two unrelated steps; add dedicated proceed-prompt keys (question/agree/disagree) and update the code to use them.

Suggested change
Text = Loc.GetString("intro-welcome-begin-question-message"),
ModulateSelfOverride = Color.Black,
HorizontalAlignment = Control.HAlignment.Center,
};
var agreeButton = new Button
{
Text = Loc.GetString("intro-welcome-begin-agree-button"),
HorizontalAlignment = Control.HAlignment.Center,
Margin = new Thickness(0, 8, 0, 0),
};
var disagreeButton = new Button
{
Text = Loc.GetString("intro-welcome-begin-disagree-button"),
Text = Loc.GetString("intro-proceed-prompt-question-message"),
ModulateSelfOverride = Color.Black,
HorizontalAlignment = Control.HAlignment.Center,
};
var agreeButton = new Button
{
Text = Loc.GetString("intro-proceed-prompt-agree-button"),
HorizontalAlignment = Control.HAlignment.Center,
Margin = new Thickness(0, 8, 0, 0),
};
var disagreeButton = new Button
{
Text = Loc.GetString("intro-proceed-prompt-disagree-button"),

Copilot uses AI. Check for mistakes.
Comment on lines +98 to +99

IntroUi.PlanBubble(proceedBubble, HighlightOverlay.OverlayControlPosition.Center);
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IntroUi.PlanBubble(proceedBubble, ...) is called twice for the same proceedBubble instance (once near the top of PromptOverlay() and again at the end). The second call will enqueue or attempt to re-place a control that was already added, leading to duplicate display or invalid parenting; remove the redundant call.

Suggested change
IntroUi.PlanBubble(proceedBubble, HighlightOverlay.OverlayControlPosition.Center);

Copilot uses AI. Check for mistakes.
Comment on lines +108 to +118
if (_ignoreHighlightClicks)
{ // skoro nasza kontrolka jest w innej gałęzi drzewa UI,
// najlepszym sposobem ignorowania kliknięć to ustawienie filtra bezpośrednio na HighlightRegion
region.OriginalMouseFilter = control.MouseFilter;
control.MouseFilter = MouseFilterMode.Ignore;
}

if (region is { CloseOverlayOnClick: true, Control: Button button })
{
button.OnPressed += _ => DestroyOverlay();
}
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When ignoreHighlightClicks is enabled, HighlightControl() sets the highlighted control's MouseFilter to Ignore (and optionally subscribes to button presses), but there is no guaranteed cleanup path that restores the original MouseFilter / unsubscribes handlers when the overlay is closed/orphaned. This can permanently break the underlying UI control and/or leak the overlay via event handlers. Ensure overlay teardown (e.g. DestroyOverlay, ExitedTree, Dispose, or IntroductionUIController.RemoveOverlay) always calls UnhighlightControl() and detaches any temporary event subscriptions.

Copilot uses AI. Check for mistakes.
Comment on lines +74 to +84
foreach (var text in texts)
{
var label = new RichTextLabel
{
Text = text,
Modulate = Color.Black,
Margin = new Thickness(0f, 5f),
};

BubbleMain.AddChild(label);
}
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This foreach loop immediately maps its iteration variable to another variable - consider mapping the sequence explicitly using '.Select(...)'.

Copilot uses AI. Check for mistakes.
Copilot AI review requested due to automatic review settings February 28, 2026 14:59
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@nikitosych nikitosych added this to the Next Stage milestone Mar 6, 2026
@nikitosych nikitosych added the P2: Podwyższony Priorytet: Element może wymagać większej uwagi ze strony maintainerów. label Mar 9, 2026
@nikitosych nikitosych added Z1: Wysoka Złożoność: Wymagana rozległa wiedza na temat kodu źródłowego. Z0: Bardzo Wysoka Złożoność: Wymagana jest zaawansowana wiedza na temat kodu źródłowego. Rozważ atomizację. and removed Zmiany: Prototypy Z1: Wysoka Złożoność: Wymagana rozległa wiedza na temat kodu źródłowego. S: Wymaga Przeglądu Status: Ten pull request wymaga przeglądu mainteinera labels Mar 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

O: C# Obszar: Praca z kodem C#. O: Tłumaczenie Obszar: Zgłoszenia i zmiany dotyczące lokalizacji gry. P2: Podwyższony Priorytet: Element może wymagać większej uwagi ze strony maintainerów. size/L Z0: Bardzo Wysoka Złożoność: Wymagana jest zaawansowana wiedza na temat kodu źródłowego. Rozważ atomizację. Zmiany: Assety Zmiany dotyczą plików multimedialnych gry, które nie mają wpływu na inne obszary. Zmiany: Mapa Zmiany: UI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants