Уменьшение количества редактирований файлов оффов (#3365)

This commit is contained in:
Vigers Ray 2025-12-26 03:30:36 +03:00 committed by GitHub
parent 4ead93709c
commit 3d383e5377
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
268 changed files with 1844802 additions and 1778 deletions

View file

@ -1,5 +1,5 @@
#blank_issues_enabled: true blank_issues_enabled: true
#contact_links: contact_links:
# - name: Request a Feature - name: Request a Feature
# url: https://discord.gg/rGvu9hKffJ url: https://discord.gg/rGvu9hKffJ
# about: Submit feature requests on our Discord server (https://discord.gg/rGvu9hKffJ). about: Submit feature requests on our Discord server (https://discord.gg/rGvu9hKffJ).

View file

@ -1,17 +0,0 @@
---
name: Предложить новое
about: Запросить у разработчиков добавить что-то новое.
title: ''
labels: ''
assignees: VigersRay
---
**Ваш запрос функции связан с проблемой/ошибкой? Опишите, пожалуйста.**
<!-- Четкое и краткое описание проблемы. Например: Меня всегда раздражает, когда [...] -->
**Опишите желаемое**
<!-- Четкое и краткое описание того, что вы хотите, и что оно должно делать. -->
**Дополнительный контекст**
<!-- Добавьте сюда любой другой контекст или скриншоты, связанные с запросом функции. -->

View file

@ -1,11 +0,0 @@
---
name: Поставить задачу
about: Создать задачу для себя чтобы о ней знали другие, а так же запросить у спрайтеров
спрайты.
title: ''
labels: ''
assignees: VigersRay
---

4
.github/config.yml vendored
View file

@ -3,7 +3,7 @@ Project-Condor:
project: 2 project: 2
inbox: Inbox inbox: Inbox
labels: labels:
"W: In Progress": "В Прогрессе" "W: In Progress": "In Progress"
"W: Discussion": "Design and Discussion" "W: Discussion": "Design and Discussion"
"W: Backlog": "Backlog" "W: Backlog": "Backlog"
"W: Next": "Следующее" "W: Next": "Next"

20
.github/labeler.yml vendored
View file

@ -1,30 +1,30 @@
"Изменения: Спрайты": "Changes: Sprites":
- changed-files: - changed-files:
- any-glob-to-any-file: '**/*.rsi/*.png' - any-glob-to-any-file: '**/*.rsi/*.png'
"Изменения: Карты": "Changes: Map":
- changed-files: - changed-files:
- any-glob-to-any-file: - any-glob-to-any-file:
- 'Resources/Maps/**/*.yml' - 'Resources/Maps/**/*.yml'
- 'Resources/Prototypes/Maps/**/*.yml' - 'Resources/Prototypes/Maps/**/*.yml'
"Изменения: Интерфейс": "Changes: UI":
- changed-files: - changed-files:
- any-glob-to-any-file: '**/*.xaml*' - any-glob-to-any-file: '**/*.xaml*'
"Изменения: Шейдеры": "Changes: Shaders":
- changed-files: - changed-files:
- any-glob-to-any-file: '**/*.swsl' - any-glob-to-any-file: '**/*.swsl'
"Изменения: Локализация": "Changes: Audio":
- changed-files:
- any-glob-to-any-file: '**/*.ftl'
"Изменения: Аудио":
- changed-files: - changed-files:
- any-glob-to-any-file: '**/*.ogg' - any-glob-to-any-file: '**/*.ogg'
"Нет C#": "Changes: No C#":
- changed-files: - changed-files:
# Equiv to any-glob-to-all as long as this has one matcher. If ALL changed files are not C# files, then apply label. # Equiv to any-glob-to-all as long as this has one matcher. If ALL changed files are not C# files, then apply label.
- all-globs-to-all-files: "!**/*.cs" - all-globs-to-all-files: "!**/*.cs"
"Changes: Localisation":
- changed-files:
- any-glob-to-any-file: '**/*.ftl'

1
.gitignore vendored
View file

@ -306,4 +306,3 @@ Resources/MapImages
# Direnv stuff # Direnv stuff
.direnv/ .direnv/
.idea/

View file

@ -4,4 +4,4 @@
<toRun name="Content.Server" type="DotNetProject" /> <toRun name="Content.Server" type="DotNetProject" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
</component> </component>

View file

@ -125,6 +125,8 @@ internal sealed class BuckleSystem : SharedBuckleSystem
!buckled || !buckled ||
args.Sprite == null) args.Sprite == null)
{ {
// Sunrise-Edit
//_rotationVisualizerSystem.SetHorizontalAngle((uid, rotVisuals), rotVisuals.DefaultRotation);
return; return;
} }

View file

@ -121,16 +121,15 @@ namespace Content.Client.Changelog
}); });
} }
// Sunrise-Start
public Changelog MergeChangelogs(List<Changelog> changelogs) public Changelog MergeChangelogs(List<Changelog> changelogs)
{ {
var combinedChangelog = new Changelog(); var combinedChangelog = new Changelog();
foreach (var changelog in changelogs) foreach (var changelog in changelogs)
{ {
// Объединение списков записей
combinedChangelog.Entries.AddRange(changelog.Entries); combinedChangelog.Entries.AddRange(changelog.Entries);
// Объединение свойств
if (!string.IsNullOrEmpty(changelog.Name)) if (!string.IsNullOrEmpty(changelog.Name))
{ {
combinedChangelog.Name = changelog.Name; combinedChangelog.Name = changelog.Name;
@ -147,11 +146,11 @@ namespace Content.Client.Changelog
} }
} }
// Упорядочивание по времени
combinedChangelog.Entries = combinedChangelog.Entries.OrderBy(entry => entry.Time).ToList(); combinedChangelog.Entries = combinedChangelog.Entries.OrderBy(entry => entry.Time).ToList();
return combinedChangelog; return combinedChangelog;
} }
// Sunrise-End
public void PostInject() public void PostInject()
{ {

View file

@ -16,7 +16,7 @@
VerticalAlignment="Bottom" VerticalAlignment="Bottom"
HorizontalAlignment="Center"> HorizontalAlignment="Center">
<SplitContainer Name="ScreenContainer" HorizontalExpand="True" VerticalExpand="True" SplitWidth="0" StretchDirection="TopLeft"> <SplitContainer Name="ScreenContainer" HorizontalExpand="True" VerticalExpand="True" SplitWidth="0" StretchDirection="TopLeft">
<LayoutContainer Name="ViewportContainer" SizeFlagsStretchRatio="6" HorizontalExpand="True" VerticalExpand="True"> <LayoutContainer Name="ViewportContainer" SizeFlagsStretchRatio="6" HorizontalExpand="True" VerticalExpand="True"> <!-- Sunrise-Edit -->
<controls:MainViewport Name="MainViewport"/> <controls:MainViewport Name="MainViewport"/>
<widgets:GhostGui Name="Ghost" Access="Protected" /> <widgets:GhostGui Name="Ghost" Access="Protected" />
<inventory:InventoryGui Name="Inventory" Access="Protected"/> <inventory:InventoryGui Name="Inventory" Access="Protected"/>
@ -34,7 +34,7 @@
<BoxContainer Orientation="Vertical" HorizontalExpand="True" SeparationOverride="10" Margin="10"> <BoxContainer Orientation="Vertical" HorizontalExpand="True" SeparationOverride="10" Margin="10">
<menuBar:GameTopMenuBar Name="TopBar" HorizontalExpand="True" Access="Protected" /> <menuBar:GameTopMenuBar Name="TopBar" HorizontalExpand="True" Access="Protected" />
<us:UserActionsPanel></us:UserActionsPanel> <us:UserActionsPanel></us:UserActionsPanel> <!-- Sunrise-Edit -->
<chat:ChatBox VerticalExpand="True" HorizontalExpand="True" Name="Chat" Access="Protected" MinSize="0 0"/> <chat:ChatBox VerticalExpand="True" HorizontalExpand="True" Name="Chat" Access="Protected" MinSize="0 0"/>
</BoxContainer> </BoxContainer>
</PanelContainer> </PanelContainer>

View file

@ -103,7 +103,7 @@ public sealed class AHelpUIController: UIController, IOnSystemChanged<BwoinkSyst
{ {
_bwoinkSystem = system; _bwoinkSystem = system;
_bwoinkSystem.OnBwoinkTextMessageRecieved += ReceivedBwoink; _bwoinkSystem.OnBwoinkTextMessageRecieved += ReceivedBwoink;
_bwoinkSystem.OnBwoinkCooldownReceived += ReceivedCooldown; _bwoinkSystem.OnBwoinkCooldownReceived += ReceivedCooldown; // Sunrise-Edit
_input.SetInputCommand(ContentKeyFunctions.OpenAHelp, _input.SetInputCommand(ContentKeyFunctions.OpenAHelp,
InputCmdHandler.FromDelegate(_ => ToggleWindow())); InputCmdHandler.FromDelegate(_ => ToggleWindow()));
@ -115,7 +115,7 @@ public sealed class AHelpUIController: UIController, IOnSystemChanged<BwoinkSyst
DebugTools.Assert(_bwoinkSystem != null); DebugTools.Assert(_bwoinkSystem != null);
_bwoinkSystem!.OnBwoinkTextMessageRecieved -= ReceivedBwoink; _bwoinkSystem!.OnBwoinkTextMessageRecieved -= ReceivedBwoink;
_bwoinkSystem!.OnBwoinkCooldownReceived -= ReceivedCooldown; _bwoinkSystem!.OnBwoinkCooldownReceived -= ReceivedCooldown; // Sunrise-Edit
_bwoinkSystem = null; _bwoinkSystem = null;
} }
@ -160,11 +160,13 @@ public sealed class AHelpUIController: UIController, IOnSystemChanged<BwoinkSyst
UIHelper!.Receive(message); UIHelper!.Receive(message);
} }
// Sunrise-Start
private void ReceivedCooldown(object? sender, BwoinkCooldownMessage message) private void ReceivedCooldown(object? sender, BwoinkCooldownMessage message)
{ {
EnsureUIHelper(); EnsureUIHelper();
UIHelper?.OnCooldownReceived(message); UIHelper?.OnCooldownReceived(message);
} }
// Sunrise-End
private void DiscordRelayUpdated(BwoinkDiscordRelayUpdated args, EntitySessionEventArgs session) private void DiscordRelayUpdated(BwoinkDiscordRelayUpdated args, EntitySessionEventArgs session)
{ {
@ -350,7 +352,7 @@ public interface IAHelpUIHandler : IDisposable
public void ToggleWindow(); public void ToggleWindow();
public void DiscordRelayChanged(bool active); public void DiscordRelayChanged(bool active);
public void PeopleTypingUpdated(BwoinkPlayerTypingUpdated args); public void PeopleTypingUpdated(BwoinkPlayerTypingUpdated args);
public void OnCooldownReceived(BwoinkCooldownMessage message); public void OnCooldownReceived(BwoinkCooldownMessage message); // Sunrise-Edit
public event Action OnClose; public event Action OnClose;
public event Action OnOpen; public event Action OnOpen;
public Action<NetUserId, string, bool, bool>? SendMessageAction { get; set; } public Action<NetUserId, string, bool, bool>? SendMessageAction { get; set; }
@ -441,6 +443,7 @@ public sealed class AdminAHelpUIHandler : IAHelpUIHandler
panel.UpdatePlayerTyping(args.PlayerName, args.Typing); panel.UpdatePlayerTyping(args.PlayerName, args.Typing);
} }
// Sunrise-Start
public void OnCooldownReceived(BwoinkCooldownMessage message) public void OnCooldownReceived(BwoinkCooldownMessage message)
{ {
// For admins, we might want to show a message in the currently active panel // For admins, we might want to show a message in the currently active panel
@ -451,7 +454,6 @@ public sealed class AdminAHelpUIHandler : IAHelpUIHandler
} }
} }
// Sunrise-Start
public void SetLoadDb(NetUserId userId) public void SetLoadDb(NetUserId userId)
{ {
if (_activePanelMap.TryGetValue(userId, out var panel)) if (_activePanelMap.TryGetValue(userId, out var panel))
@ -640,10 +642,12 @@ public sealed class UserAHelpUIHandler : IAHelpUIHandler
{ {
} }
// Sunrise-Start
public void OnCooldownReceived(BwoinkCooldownMessage message) public void OnCooldownReceived(BwoinkCooldownMessage message)
{ {
_chatPanel?.OnCooldownReceived(message); _chatPanel?.OnCooldownReceived(message);
} }
// Sunrise-End
public event Action? OnClose; public event Action? OnClose;
public event Action? OnOpen; public event Action? OnOpen;

View file

@ -274,7 +274,7 @@ public sealed partial class ChatUIController : UIController
SetChatWindowOpacity(opacity); SetChatWindowOpacity(opacity);
} }
public void SetChatWindowOpacity(float opacity) public void SetChatWindowOpacity(float opacity) // Sunrise-Edit
{ {
var chatBox = UIManager.ActiveScreen?.GetWidget<ChatBox>() ?? UIManager.ActiveScreen?.GetWidget<ResizableChatBox>(); var chatBox = UIManager.ActiveScreen?.GetWidget<ChatBox>() ?? UIManager.ActiveScreen?.GetWidget<ResizableChatBox>();

View file

@ -1,5 +1,6 @@
<widgets:ChatBox <widgets:ChatBox
xmlns="https://spacestation14.io" xmlns="https://spacestation14.io"
xmlns:graphics="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:widgets="clr-namespace:Content.Client.UserInterface.Systems.Chat.Widgets" xmlns:widgets="clr-namespace:Content.Client.UserInterface.Systems.Chat.Widgets"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Systems.Chat.Controls" xmlns:controls="clr-namespace:Content.Client.UserInterface.Systems.Chat.Controls"
MouseFilter="Stop" MouseFilter="Stop"

View file

@ -54,10 +54,12 @@ public partial class ChatBox : UIWidget
_controller.RegisterChat(this); _controller.RegisterChat(this);
} }
// Sunrise-Start
public void SetChatOpacity() public void SetChatOpacity()
{ {
_controller.SetChatWindowOpacity(_configurationManager.GetCVar(CCVars.ChatWindowOpacity)); _controller.SetChatWindowOpacity(_configurationManager.GetCVar(CCVars.ChatWindowOpacity));
} }
// Sunrise-End
private void OnTextEntered(LineEditEventArgs args) private void OnTextEntered(LineEditEventArgs args)
{ {
@ -94,7 +96,7 @@ public partial class ChatBox : UIWidget
public void Repopulate() public void Repopulate()
{ {
ClearChatContents(); // Sunrise ClearChatContents(); // Sunrise-Edit
foreach (var message in _controller.History) foreach (var message in _controller.History)
{ {
@ -104,7 +106,7 @@ public partial class ChatBox : UIWidget
private void OnChannelFilter(ChatChannel channel, bool active) private void OnChannelFilter(ChatChannel channel, bool active)
{ {
ClearChatContents(); // Sunrise ClearChatContents(); // Sunrise-Edit
foreach (var message in _controller.History) foreach (var message in _controller.History)
{ {
@ -122,7 +124,7 @@ public partial class ChatBox : UIWidget
_controller.UpdateHighlights(highlighs); _controller.UpdateHighlights(highlighs);
} }
// Sunrise start // Sunrise-Start
private void ClearChatContents() private void ClearChatContents()
{ {
Contents.Clear(); Contents.Clear();
@ -135,7 +137,7 @@ public partial class ChatBox : UIWidget
} }
} }
} }
// Sunrise end // Sunrise-End
public void AddLine(string message, Color color) public void AddLine(string message, Color color)
{ {

View file

@ -71,11 +71,13 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
_changelog.ToggleWindow(); _changelog.ToggleWindow();
}; };
// Sunrise-Start
_escapeWindow.RoadmapButton.OnPressed += _ => _escapeWindow.RoadmapButton.OnPressed += _ =>
{ {
CloseEscapeWindow(); CloseEscapeWindow();
UIManager.GetUIController<RoadmapUIController>().ToggleRoadmap(); UIManager.GetUIController<RoadmapUIController>().ToggleRoadmap();
}; };
// Sunrise-End
_escapeWindow.RulesButton.OnPressed += _ => _escapeWindow.RulesButton.OnPressed += _ =>
{ {
@ -101,7 +103,7 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
_console.ExecuteCommand("quit"); _console.ExecuteCommand("quit");
}; };
// Sunrise-start // Sunrise-Start
_escapeWindow.DonateButton.OnPressed += _ => _escapeWindow.DonateButton.OnPressed += _ =>
{ {
_uri.OpenUri(_cfg.GetCVar(SunriseCCVars.InfoLinksDonate)); _uri.OpenUri(_cfg.GetCVar(SunriseCCVars.InfoLinksDonate));
@ -111,7 +113,7 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
{ {
_uri.OpenUri(_cfg.GetCVar(SunriseCCVars.InfoLinksReplays)); _uri.OpenUri(_cfg.GetCVar(SunriseCCVars.InfoLinksReplays));
}; };
// Sunrise-end // Sunrise-End
_escapeWindow.WikiButton.OnPressed += _ => _escapeWindow.WikiButton.OnPressed += _ =>
{ {
@ -126,9 +128,11 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
// Hide wiki button if we don't have a link for it. // Hide wiki button if we don't have a link for it.
_escapeWindow.WikiButton.Visible = _cfg.GetCVar(CCVars.InfoLinksWiki) != ""; _escapeWindow.WikiButton.Visible = _cfg.GetCVar(CCVars.InfoLinksWiki) != "";
_escapeWindow.DonateButton.Visible = _cfg.GetCVar(SunriseCCVars.InfoLinksDonate) != ""; // Sunrise-Sponsors
_escapeWindow.ReplaysButton.Visible = _cfg.GetCVar(SunriseCCVars.InfoLinksReplays) != ""; // Sunrise-Replays // Sunrise-Start
_escapeWindow.DonateButton.Visible = _cfg.GetCVar(SunriseCCVars.InfoLinksDonate) != "";
_escapeWindow.ReplaysButton.Visible = _cfg.GetCVar(SunriseCCVars.InfoLinksReplays) != "";
// Sunrise-End
CommandBinds.Builder CommandBinds.Builder
.Bind(EngineKeyFunctions.EscapeMenu, .Bind(EngineKeyFunctions.EscapeMenu,

View file

@ -14,7 +14,7 @@ namespace Content.Client.UserInterface.Systems.Ghost.Controls.Roles
{ {
private SpriteSystem _spriteSystem; private SpriteSystem _spriteSystem;
public event Action<GhostRoleInfo>? OnRoleSelected; public event Action<GhostRoleInfo>? OnRoleSelected;
public event Action<GhostRoleInfo>? OnRoleRules; public event Action<GhostRoleInfo>? OnRoleRules; // Sunrise-Edit
public event Action<GhostRoleInfo>? OnRoleFollow; public event Action<GhostRoleInfo>? OnRoleFollow;
public GhostRoleButtonsBox(bool hasAccess, FormattedMessage? reason, IEnumerable<GhostRoleInfo> roles, SpriteSystem spriteSystem) public GhostRoleButtonsBox(bool hasAccess, FormattedMessage? reason, IEnumerable<GhostRoleInfo> roles, SpriteSystem spriteSystem)
@ -26,7 +26,7 @@ namespace Content.Client.UserInterface.Systems.Ghost.Controls.Roles
{ {
var button = new GhostRoleEntryButtons(role); var button = new GhostRoleEntryButtons(role);
button.RequestButton.OnPressed += _ => OnRoleSelected?.Invoke(role); button.RequestButton.OnPressed += _ => OnRoleSelected?.Invoke(role);
button.RulesButton.OnPressed += _ => OnRoleRules?.Invoke(role); button.RulesButton.OnPressed += _ => OnRoleRules?.Invoke(role); // Sunrise-Edit
button.FollowButton.OnPressed += _ => OnRoleFollow?.Invoke(role); button.FollowButton.OnPressed += _ => OnRoleFollow?.Invoke(role);
if (!hasAccess) if (!hasAccess)

View file

@ -33,8 +33,8 @@ namespace Content.Client.VendingMachines.UI
public VendingMachineMenu() public VendingMachineMenu()
{ {
MinSize = new Vector2(250, 150); // Sunrise-Resize MinSize = new Vector2(250, 150); // Sunrise-Edit
SetSize = new Vector2(450, 150); // Sunrise-Resize SetSize = new Vector2(450, 150); // Sunrise-Edit
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this); IoCManager.InjectDependencies(this);

View file

@ -24,16 +24,16 @@ public sealed class VoiceMaskBoundUserInterface : BoundUserInterface
_window = this.CreateWindow<VoiceMaskNameChangeWindow>(); _window = this.CreateWindow<VoiceMaskNameChangeWindow>();
_window.ReloadVerbs(_protomanager); _window.ReloadVerbs(_protomanager);
_window.AddVerbs(); _window.AddVerbs();
// Sunrise-TTS-Start // Sunrise-Start
if (IoCManager.Resolve<IConfigurationManager>().GetCVar(SunriseCCVars.TTSEnabled)) if (IoCManager.Resolve<IConfigurationManager>().GetCVar(SunriseCCVars.TTSEnabled))
{ {
_window.ReloadVoices(IoCManager.Resolve<IPrototypeManager>()); _window.ReloadVoices(IoCManager.Resolve<IPrototypeManager>());
} }
// Sunrise-TTS-End // Sunrise-End
_window.OnNameChange += OnNameSelected; _window.OnNameChange += OnNameSelected;
_window.OnVerbChange += verb => SendMessage(new VoiceMaskChangeVerbMessage(verb)); _window.OnVerbChange += verb => SendMessage(new VoiceMaskChangeVerbMessage(verb));
_window.OnVoiceChange += voice => SendMessage(new VoiceMaskChangeVoiceMessage(voice)); // Sunrise-TTS _window.OnVoiceChange += voice => SendMessage(new VoiceMaskChangeVoiceMessage(voice)); // Sunrise-Edit
} }
private void OnNameSelected(string name) private void OnNameSelected(string name)
@ -48,7 +48,7 @@ public sealed class VoiceMaskBoundUserInterface : BoundUserInterface
return; return;
} }
_window.UpdateState(cast.Name, cast.Voice, cast.Verb); // Sunrise-TTS _window.UpdateState(cast.Name, cast.Voice, cast.Verb); // Sunrise-Edit
} }
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)

View file

@ -12,11 +12,11 @@
<Label Text="{Loc 'voice-mask-name-change-speech-style'}" /> <Label Text="{Loc 'voice-mask-name-change-speech-style'}" />
<OptionButton Name="SpeechVerbSelector" /> <!-- Populated in LoadVerbs --> <OptionButton Name="SpeechVerbSelector" /> <!-- Populated in LoadVerbs -->
</BoxContainer> </BoxContainer>
<!-- Sunrise-TTS-Start --> <!-- Sunrise-Start -->
<BoxContainer Orientation="Horizontal" Margin="5" Visible="False" Name="TTSContainer"> <BoxContainer Orientation="Horizontal" Margin="5" Visible="False" Name="TTSContainer">
<Label Text="{Loc 'voice-mask-voice-change-info'}" /> <Label Text="{Loc 'voice-mask-voice-change-info'}" />
<OptionButton Name="VoiceSelector" /> <!-- Populated in LoadVerbs --> <OptionButton Name="VoiceSelector" /> <!-- Populated in LoadVerbs -->
</BoxContainer> </BoxContainer>
<!-- Sunrise-TTS-End --> <!-- Sunrise-End -->
</BoxContainer> </BoxContainer>
</controls:FancyWindow> </controls:FancyWindow>

View file

@ -13,10 +13,10 @@ public sealed partial class VoiceMaskNameChangeWindow : FancyWindow
{ {
public Action<string>? OnNameChange; public Action<string>? OnNameChange;
public Action<string?>? OnVerbChange; public Action<string?>? OnVerbChange;
public Action<string>? OnVoiceChange; // Sunrise-TTS public Action<string>? OnVoiceChange; // Sunrise-Edit
private List<(string, string)> _verbs = new(); private List<(string, string)> _verbs = new();
private List<TTSVoicePrototype> _voices = new(); // Sunrise-TTS private List<TTSVoicePrototype> _voices = new(); // Sunrise-Edit
private string? _verb; private string? _verb;
@ -67,7 +67,7 @@ public sealed partial class VoiceMaskNameChangeWindow : FancyWindow
SpeechVerbSelector.SelectId(id); SpeechVerbSelector.SelectId(id);
} }
// Sunrise-TTS-Start // Sunrise-Start
public void ReloadVoices(IPrototypeManager proto) public void ReloadVoices(IPrototypeManager proto)
{ {
VoiceSelector.OnItemSelected += args => VoiceSelector.OnItemSelected += args =>
@ -91,7 +91,7 @@ public sealed partial class VoiceMaskNameChangeWindow : FancyWindow
if (_voices.Count > 0) if (_voices.Count > 0)
TTSContainer.Visible = true; TTSContainer.Visible = true;
} }
// Sunrise-TTS-End // Sunrise-End
public void UpdateState(string name, string voice, string? verb) // Sunrise-TTS public void UpdateState(string name, string voice, string? verb) // Sunrise-TTS
{ {
@ -107,10 +107,10 @@ public sealed partial class VoiceMaskNameChangeWindow : FancyWindow
} }
} }
// Sunrise-TTS-Start // Sunrise-Start
var voiceIdx = _voices.FindIndex(v => v.ID == voice); var voiceIdx = _voices.FindIndex(v => v.ID == voice);
if (voiceIdx != -1) if (voiceIdx != -1)
VoiceSelector.Select(voiceIdx); VoiceSelector.Select(voiceIdx);
// Sunrise-TTS-End // Sunrise-End
} }
} }

View file

@ -49,7 +49,7 @@ namespace Content.Client.Voting.UI
{ {
{ VotekickReasonType.Raiding.ToString(), Loc.GetString("ui-vote-votekick-type-raiding") }, { VotekickReasonType.Raiding.ToString(), Loc.GetString("ui-vote-votekick-type-raiding") },
{ VotekickReasonType.Cheating.ToString(), Loc.GetString("ui-vote-votekick-type-cheating") }, { VotekickReasonType.Cheating.ToString(), Loc.GetString("ui-vote-votekick-type-cheating") },
{ VotekickReasonType.Spam.ToString(), Loc.GetString("ui-vote-votekick-type-spam") } { VotekickReasonType.Spam.ToString(), Loc.GetString("ui-vote-votekick-type-spamming") }
}; };
public Dictionary<NetUserId, (NetEntity, string)> PlayerList = new(); public Dictionary<NetUserId, (NetEntity, string)> PlayerList = new();
@ -88,8 +88,10 @@ namespace Content.Client.Voting.UI
VoteTypeButton.AddItem(Loc.GetString(option.Name), (int)voteType); VoteTypeButton.AddItem(Loc.GetString(option.Name), (int)voteType);
} }
// Sunrise-Start
var loc = IoCManager.Resolve<ILocalizationManager>(); var loc = IoCManager.Resolve<ILocalizationManager>();
DetailsEdit.Placeholder = new Rope.Leaf(loc.GetString("ui-vote-votekick-details-placeholder")); DetailsEdit.Placeholder = new Rope.Leaf(loc.GetString("ui-vote-votekick-details-placeholder"));
// Sunrise-End
_state.OnStateChanged += OnStateChanged; _state.OnStateChanged += OnStateChanged;
VoteTypeButton.OnItemSelected += VoteTypeSelected; VoteTypeButton.OnItemSelected += VoteTypeSelected;
@ -181,7 +183,7 @@ namespace Content.Client.Voting.UI
} }
} }
commandArgs += $"\"{Rope.Collapse(DetailsEdit.TextRope)}\""; commandArgs += $"\"{Rope.Collapse(DetailsEdit.TextRope)}\""; // Sunrise-Edit
_consoleHost.LocalShell.RemoteExecuteCommand($"createvote {((StandardVoteType)typeId).ToString()} {commandArgs}"); _consoleHost.LocalShell.RemoteExecuteCommand($"createvote {((StandardVoteType)typeId).ToString()} {commandArgs}");
} }
@ -240,7 +242,6 @@ namespace Content.Client.Voting.UI
VoteTypeButton.SelectId(obj.Id); VoteTypeButton.SelectId(obj.Id);
VoteNotTrustedLabel.Visible = false; VoteNotTrustedLabel.Visible = false;
DetailsEdit.Visible = false;
if ((StandardVoteType)obj.Id == StandardVoteType.Votekick) if ((StandardVoteType)obj.Id == StandardVoteType.Votekick)
{ {
if (!IsAllowedVotekick) if (!IsAllowedVotekick)
@ -254,8 +255,6 @@ namespace Content.Client.Voting.UI
{ {
_votingSystem.RequestVotePlayerList(); _votingSystem.RequestVotePlayerList();
} }
DetailsEdit.Visible = true;
} }
VoteWarningLabel.Visible = AvailableVoteOptions[(StandardVoteType)obj.Id].EnableVoteWarning; VoteWarningLabel.Visible = AvailableVoteOptions[(StandardVoteType)obj.Id].EnableVoteWarning;

View file

@ -70,13 +70,16 @@ namespace Content.Client.Voting
_netManager.RegisterNetMessage<MsgVoteData>(ReceiveVoteData); _netManager.RegisterNetMessage<MsgVoteData>(ReceiveVoteData);
_netManager.RegisterNetMessage<MsgVoteCanCall>(ReceiveVoteCanCall); _netManager.RegisterNetMessage<MsgVoteCanCall>(ReceiveVoteCanCall);
// Sunrise-Start
_netManager.RegisterNetMessage<RequestVoteMusicDisableOptionMessage>(OnRequestVoteMusicDisableOption); _netManager.RegisterNetMessage<RequestVoteMusicDisableOptionMessage>(OnRequestVoteMusicDisableOption);
_netManager.RegisterNetMessage<VoteMusicDisableOptionMessage>(); _netManager.RegisterNetMessage<VoteMusicDisableOptionMessage>();
_cfg.OnValueChanged(SunriseCCVars.VoteMusicDisable, OnVoteMusicDisableOptionChanged); _cfg.OnValueChanged(SunriseCCVars.VoteMusicDisable, OnVoteMusicDisableOptionChanged);
// Sunrise-End
_client.RunLevelChanged += ClientOnRunLevelChanged; _client.RunLevelChanged += ClientOnRunLevelChanged;
} }
// Sunrise-Start
private void OnRequestVoteMusicDisableOption(RequestVoteMusicDisableOptionMessage _) private void OnRequestVoteMusicDisableOption(RequestVoteMusicDisableOptionMessage _)
{ {
var message = new VoteMusicDisableOptionMessage var message = new VoteMusicDisableOptionMessage
@ -94,6 +97,7 @@ namespace Content.Client.Voting
}; };
_netManager.ClientSendMessage(message); _netManager.ClientSendMessage(message);
} }
// Sunrise-End
private void ClientOnRunLevelChanged(object? sender, RunLevelChangedEventArgs e) private void ClientOnRunLevelChanged(object? sender, RunLevelChangedEventArgs e)
{ {
@ -180,7 +184,7 @@ namespace Content.Client.Voting
{ {
Entries = message.Options Entries = message.Options
.Select(c => new VoteEntry(c.name)) .Select(c => new VoteEntry(c.name))
.ToArray(), .ToArray()
}; };
existingVote = vote; existingVote = vote;

View file

@ -3,39 +3,33 @@ using Robust.Client.Graphics;
using Robust.Client.Input; using Robust.Client.Input;
using Robust.Client.Player; using Robust.Client.Player;
using Robust.Shared.Console; using Robust.Shared.Console;
using Robust.Shared.Map;
namespace Content.Client.Weapons.Melee; namespace Content.Client.Weapons.Melee;
public sealed class MeleeSpreadCommand : LocalizedEntityCommands
public sealed class MeleeSpreadCommand : IConsoleCommand
{ {
public string Command => "showmeleespread"; [Dependency] private readonly IEyeManager _eyeManager = default!;
public string Description => "Shows the current weapon's range and arc for debugging"; [Dependency] private readonly IInputManager _inputManager = default!;
public string Help => $"{Command}"; [Dependency] private readonly IOverlayManager _overlay = default!;
public void Execute(IConsoleShell shell, string argStr, string[] args) [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly MeleeWeaponSystem _meleeSystem = default!;
[Dependency] private readonly SharedCombatModeSystem _combatSystem = default!;
[Dependency] private readonly SharedTransformSystem _transformSystem = default!;
public override string Command => "showmeleespread";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{ {
var collection = IoCManager.Instance; if (_overlay.RemoveOverlay<MeleeArcOverlay>())
if (collection == null)
return; return;
var overlayManager = collection.Resolve<IOverlayManager>(); _overlay.AddOverlay(new MeleeArcOverlay(
EntityManager,
if (overlayManager.RemoveOverlay<MeleeArcOverlay>()) _eyeManager,
{ _inputManager,
return; _playerManager,
} _meleeSystem,
_combatSystem,
var sysManager = collection.Resolve<IEntitySystemManager>(); _transformSystem));
overlayManager.AddOverlay(new MeleeArcOverlay(
collection.Resolve<IEntityManager>(),
collection.Resolve<IEyeManager>(),
collection.Resolve<IInputManager>(),
collection.Resolve<IPlayerManager>(),
sysManager.GetEntitySystem<MeleeWeaponSystem>(),
sysManager.GetEntitySystem<SharedCombatModeSystem>(),
sysManager.GetEntitySystem<SharedTransformSystem>()));
} }
} }

View file

@ -1,6 +0,0 @@
namespace Content.Client.Weapons.Ranged.Systems;
public enum FireModesLayers : byte
{
FireMode,
}

View file

@ -201,29 +201,10 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
("max", node.Value.Comp.MaxDurability))); ("max", node.Value.Comp.MaxDurability)));
var hasInfo = _xenoArtifact.HasUnlockedPredecessor(artifact.Value, node.Value); var hasInfo = _xenoArtifact.HasUnlockedPredecessor(artifact.Value, node.Value);
string effectDescription;
if (!node.Value.Comp.Locked)
{
// Show the real effect description if the node has been activated at least once
var rawDescription = _ent.GetComponentOrNull<MetaDataComponent>(node.Value)?.EntityDescription;
if (!string.IsNullOrEmpty(rawDescription))
{
// Try to localize the description, fall back to raw description if it fails
effectDescription = Loc.TryGetString(rawDescription, out var localized) ? localized : rawDescription;
}
else
{
effectDescription = Loc.GetString("artifact-effect-hint-data-deleted");
}
}
else
{
// Otherwise, show the censored string
effectDescription = Loc.GetString("artifact-effect-hint-data-deleted");
}
EffectValueLabel.SetMarkup(Loc.GetString("analysis-console-info-effect-value", EffectValueLabel.SetMarkup(Loc.GetString("analysis-console-info-effect-value",
("state", hasInfo), ("state", hasInfo),
("info", effectDescription))); ("info", _ent.GetComponentOrNull<MetaDataComponent>(node.Value)?.EntityDescription ?? string.Empty)));
var predecessorNodes = _xenoArtifact.GetPredecessorNodes(artifact.Value.Owner, node.Value); var predecessorNodes = _xenoArtifact.GetPredecessorNodes(artifact.Value.Owner, node.Value);
if (!hasInfo) if (!hasInfo)

View file

@ -1,8 +1,9 @@
using Content.Client.CartridgeLoader.Cartridges;
using Content.Client.UserInterface.Fragments; using Content.Client.UserInterface.Fragments;
using Content.Shared.CartridgeLoader.Cartridges; using Content.Shared.CartridgeLoader.Cartridges;
using Robust.Client.UserInterface; using Robust.Client.UserInterface;
namespace Content.Client.CartridgeLoader.Cartridges; namespace Content.Client._Sunrise.CartridgeLoader.Cartridges;
public sealed partial class NavigatorUi : UIFragment public sealed partial class NavigatorUi : UIFragment
{ {

View file

@ -1,4 +1,4 @@
<cartridges:NavigatorUiFragment xmlns:cartridges="clr-namespace:Content.Client.CartridgeLoader.Cartridges" <cartridges:NavigatorUiFragment xmlns:cartridges="clr-namespace:Content.Client._Sunrise.CartridgeLoader.Cartridges"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
xmlns="https://spacestation14.io" Margin="1 0 2 0" xmlns="https://spacestation14.io" Margin="1 0 2 0"
Orientation="Vertical"> Orientation="Vertical">

View file

@ -7,7 +7,7 @@ using Robust.Shared.Map;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using System.Numerics; using System.Numerics;
namespace Content.Client.CartridgeLoader.Cartridges; namespace Content.Client._Sunrise.CartridgeLoader.Cartridges;
[GenerateTypedNameReferences] [GenerateTypedNameReferences]
public sealed partial class NavigatorUiFragment : BoxContainer public sealed partial class NavigatorUiFragment : BoxContainer

View file

@ -1,31 +1,32 @@
using Content.Shared.Weapons.Ranged.Components;
using Content.Client.Weapons.Ranged.Components; using Content.Client.Weapons.Ranged.Components;
using Content.Client.Weapons.Ranged.Systems;
using Content.Shared.Weapons.Ranged.Components;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
namespace Content.Client.Weapons.Ranged.Systems; namespace Content.Client._Sunrise.Weapons.Ranged.Systems;
public sealed class BatteryWeaponFireModesVisualSystem : EntitySystem public sealed class BatteryWeaponFireModesVisualSystem : EntitySystem
{ {
[Dependency] private readonly GunSystem _gun = default!; [Dependency] private readonly GunSystem _gun = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<BatteryWeaponFireModesComponent, AfterAutoHandleStateEvent>(OnFireModeChanged); SubscribeLocalEvent<BatteryWeaponFireModesComponent, AfterAutoHandleStateEvent>(OnFireModeChanged);
} }
private void OnFireModeChanged(EntityUid uid, BatteryWeaponFireModesComponent component, ref AfterAutoHandleStateEvent args) private void OnFireModeChanged(EntityUid uid, BatteryWeaponFireModesComponent component, ref AfterAutoHandleStateEvent args)
{ {
if (!TryComp<SpriteComponent>(uid, out var sprite)) if (!TryComp<SpriteComponent>(uid, out var sprite))
return; return;
var fireMode = component.FireModes[component.CurrentFireMode]; var fireMode = component.FireModes[component.CurrentFireMode];
if (fireMode.VisualState != null && sprite.LayerMapTryGet(FireModesLayers.FireMode, out _)) if (fireMode.VisualState != null && sprite.LayerMapTryGet(FireModesLayers.FireMode, out _))
sprite.LayerSetState(FireModesLayers.FireMode, fireMode.VisualState); sprite.LayerSetState(FireModesLayers.FireMode, fireMode.VisualState);
if (TryComp<MagazineVisualsComponent>(uid, out var magVisualsComp) && fireMode.MagState != null) if (TryComp<MagazineVisualsComponent>(uid, out var magVisualsComp) && fireMode.MagState != null)
_gun.SetMagState(uid, fireMode.MagState, false, magVisualsComp); _gun.SetMagState(uid, fireMode.MagState, false, magVisualsComp);
} }
} }

View file

@ -0,0 +1,6 @@
namespace Content.Client._Sunrise.Weapons.Ranged.Systems;
public enum FireModesLayers : byte
{
FireMode,
}

View file

@ -33,19 +33,12 @@ public sealed class ActionsAddedTest
Assert.That(serverSession.AttachedEntity, Is.Not.Null); Assert.That(serverSession.AttachedEntity, Is.Not.Null);
var serverEnt = serverSession.AttachedEntity!.Value; var serverEnt = serverSession.AttachedEntity!.Value;
var clientEnt = clientSession!.AttachedEntity!.Value; var clientEnt = clientSession!.AttachedEntity!.Value;
try Assert.That(sEntMan.EntityExists(serverEnt));
{ Assert.That(cEntMan.EntityExists(clientEnt));
Assert.That(sEntMan.EntityExists(serverEnt)); Assert.That(sEntMan.HasComponent<ActionsComponent>(serverEnt));
Assert.That(cEntMan.EntityExists(clientEnt)); Assert.That(cEntMan.HasComponent<ActionsComponent>(clientEnt));
Assert.That(sEntMan.HasComponent<ActionsComponent>(serverEnt)); Assert.That(sEntMan.HasComponent<CombatModeComponent>(serverEnt));
Assert.That(cEntMan.HasComponent<ActionsComponent>(clientEnt)); Assert.That(cEntMan.HasComponent<CombatModeComponent>(clientEnt));
Assert.That(sEntMan.HasComponent<CombatModeComponent>(serverEnt));
Assert.That(cEntMan.HasComponent<CombatModeComponent>(clientEnt));
}
catch (AssertionException)
{
Console.WriteLine("Assert Failed.");
}
var sComp = sEntMan.GetComponent<ActionsComponent>(serverEnt); var sComp = sEntMan.GetComponent<ActionsComponent>(serverEnt);
var cComp = cEntMan.GetComponent<ActionsComponent>(clientEnt); var cComp = cEntMan.GetComponent<ActionsComponent>(clientEnt);

View file

@ -34,8 +34,10 @@ namespace Content.IntegrationTests.Tests.Buckle
- type: Body - type: Body
prototype: Human prototype: Human
- type: StandingState - type: StandingState
# Sunrise-Start
- type: Appearance - type: Appearance
- type: DoAfter - type: DoAfter
# Sunrise-End
- type: entity - type: entity
name: {StrapDummyId} name: {StrapDummyId}

View file

@ -38,12 +38,8 @@ namespace Content.IntegrationTests.Tests.Chemistry
foreach (var reactionPrototype in prototypeManager.EnumeratePrototypes<ReactionPrototype>()) foreach (var reactionPrototype in prototypeManager.EnumeratePrototypes<ReactionPrototype>())
{ {
Console.WriteLine($"\n=== Testing reaction: {reactionPrototype.ID} ==="); //since i have no clue how to isolate each loop assert-wise im just gonna throw this one in for good measure
Console.WriteLine($"Reactants:"); Console.WriteLine($"Testing {reactionPrototype.ID}");
foreach (var (id, reactant) in reactionPrototype.Reactants)
{
Console.WriteLine($" {id}: {reactant.Amount} (catalyst: {reactant.Catalyst})");
}
EntityUid beaker = default; EntityUid beaker = default;
Entity<SolutionComponent>? solutionEnt = default!; Entity<SolutionComponent>? solutionEnt = default!;
@ -102,60 +98,23 @@ namespace Content.IntegrationTests.Tests.Chemistry
await server.WaitAssertion(() => await server.WaitAssertion(() =>
{ {
//you just got linq'd fool
//(i'm sorry)
var foundProductsMap = reactionPrototype.Products var foundProductsMap = reactionPrototype.Products
.Concat(reactionPrototype.Reactants.Where(x => x.Value.Catalyst).ToDictionary(x => x.Key, x => x.Value.Amount)) .Concat(reactionPrototype.Reactants.Where(x => x.Value.Catalyst).ToDictionary(x => x.Key, x => x.Value.Amount))
.ToDictionary(x => x, _ => false); .ToDictionary(x => x, _ => false);
Console.WriteLine($"\nExpected products for {reactionPrototype.ID}:");
foreach (var (reagent, quantity) in foundProductsMap)
{
Console.WriteLine($" {reagent.Key}: {reagent.Value}");
}
Console.WriteLine($"\nActual solution contents for {reactionPrototype.ID}:");
foreach (var (reagent, quantity) in solution.Contents) foreach (var (reagent, quantity) in solution.Contents)
{ {
Console.WriteLine($" {reagent.Prototype}: {quantity}"); Assert.That(foundProductsMap.TryFirstOrNull(x => x.Key.Key == reagent.Prototype && x.Key.Value == quantity, out var foundProduct));
}
foreach (var (reagent, quantity) in solution.Contents)
{
var found = foundProductsMap.TryFirstOrNull(x => x.Key.Key == reagent.Prototype && x.Key.Value == quantity, out var foundProduct);
if (!found)
{
Console.WriteLine($"\nERROR: Failed to find match for {reagent.Prototype} x{quantity}");
var possibleMatches = foundProductsMap.Where(x => x.Key.Key == reagent.Prototype).ToList();
if (possibleMatches.Any())
{
Console.WriteLine("Possible matches with different quantities:");
foreach (var match in possibleMatches)
{
Console.WriteLine($" {match.Key.Key} x{match.Key.Value}");
}
}
else
{
Console.WriteLine("No matches found for this reagent type");
}
}
Assert.That(found, Is.True, $"Failed to find match for {reagent.Prototype} x{quantity} in reaction {reactionPrototype.ID}");
foundProductsMap[foundProduct.Value.Key] = true; foundProductsMap[foundProduct.Value.Key] = true;
} }
var missingProducts = foundProductsMap.Where(x => !x.Value).ToList(); Assert.That(foundProductsMap.All(x => x.Value));
if (missingProducts.Any())
{
Console.WriteLine($"\nERROR: Missing expected products in {reactionPrototype.ID}:");
foreach (var (reagent, _) in missingProducts)
{
Console.WriteLine($" {reagent.Key}: {reagent.Value}");
}
}
Assert.That(foundProductsMap.All(x => x.Value), $"Not all expected products were found in reaction {reactionPrototype.ID}");
}); });
} }
await pair.CleanReturnAsync(); await pair.CleanReturnAsync();
} }
} }
} }

View file

@ -109,11 +109,6 @@ namespace Content.IntegrationTests.Tests
.ToList(); .ToList();
foreach (var protoId in protoIds) foreach (var protoId in protoIds)
{ {
// Sunrise-Start
if (protoId == "Envelope")
continue;
// Sunrise-End
entityMan.SpawnEntity(protoId, map.GridCoords); entityMan.SpawnEntity(protoId, map.GridCoords);
} }
}); });

View file

@ -47,7 +47,6 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs
alertsSystem.ShowAlert(playerUid, "Debug1"); alertsSystem.ShowAlert(playerUid, "Debug1");
alertsSystem.ShowAlert(playerUid, "Debug2"); alertsSystem.ShowAlert(playerUid, "Debug2");
alerts = alertsSystem.GetActiveAlerts(playerUid);
Assert.That(alerts, Has.Count.EqualTo(alertCount + 2)); Assert.That(alerts, Has.Count.EqualTo(alertCount + 2));
}); });

View file

@ -34,8 +34,6 @@ public sealed partial class MindTests
{ {
Console.WriteLine(pair.Client.EntMan.ToPrettyString(ent)); Console.WriteLine(pair.Client.EntMan.ToPrettyString(ent));
} }
Console.WriteLine($"Client entity count: {pair.Client.EntMan.EntityCount}");
Assert.That(pair.Client.EntMan.EntityCount, Is.EqualTo(0)); Assert.That(pair.Client.EntMan.EntityCount, Is.EqualTo(0));

View file

@ -18,9 +18,11 @@ public sealed class SlippingTest : MovementTest
await SpawnTarget("TrashBananaPeel"); await SpawnTarget("TrashBananaPeel");
var modifier = Comp<MovementSpeedModifierComponent>(Player).SprintSpeedModifier; var modifier = Comp<MovementSpeedModifierComponent>(Player).SprintSpeedModifier;
// Sunrise: Ввиду бхоп системы, скорость не ровно 1, а может быть чуть больше. // Sunrise-Start
// Ввиду бхоп системы, скорость не ровно 1, а может быть чуть больше.
// Assert.That(modifier, Is.EqualTo(1), "Player is not moving at full speed."); // Assert.That(modifier, Is.EqualTo(1), "Player is not moving at full speed.");
Assert.That(Math.Abs(modifier - 1), Is.LessThan(0.1f)); // Sunrise-add Assert.That(Math.Abs(modifier - 1), Is.LessThan(0.1f));
// Sunrise-End
// Player is to the left of the banana peel. // Player is to the left of the banana peel.
Assert.That(Delta(), Is.GreaterThan(0.5f)); Assert.That(Delta(), Is.GreaterThan(0.5f));

View file

@ -45,7 +45,7 @@ namespace Content.IntegrationTests.Tests.Preferences
FlavorText = "The biggest boy around.", FlavorText = "The biggest boy around.",
Species = "Human", Species = "Human",
Age = 21, Age = 21,
BodyType = "Normal", BodyType = "Normal", // Sunrise-Edit
Appearance = new( Appearance = new(
"Afro", "Afro",
Color.Aqua, Color.Aqua,
@ -54,8 +54,8 @@ namespace Content.IntegrationTests.Tests.Preferences
Color.Azure, Color.Azure,
Color.Beige, Color.Beige,
new (), new (),
1.0f, 1.0f, // Sunrise-Edit
1.0f) 1.0f) // Sunrise-Edit
}; };
} }

View file

@ -1,84 +0,0 @@
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.FixedPoint;
namespace Content.IntegrationTests.Tests._Sunrise.Chemistry;
[TestFixture]
[TestOf(typeof(CryostasisBeakerSystem))]
public sealed class CryostasisBeakerTests
{
[TestPrototypes]
private const string Prototypes = @"
- type: entity
id: TestCryostasisBeaker
components:
- type: SolutionContainerManager
solutions:
beaker:
maxVol: 50
canReact: false
- type: CryostasisBeaker
maxTemperature: 293.15
- type: reagent
id: TestReagent
name: reagent-name-nothing
desc: reagent-desc-nothing
physicalDesc: reagent-physical-desc-nothing
";
[Test]
public async Task CryostasisBeakerPreventsHeating()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var testMap = await pair.CreateTestMap();
await server.WaitPost(() =>
{
var solutionSystem = server.System<SharedSolutionContainerSystem>();
var beaker = server.EntMan.SpawnEntity("TestCryostasisBeaker", testMap.GridCoords);
Assert.That(solutionSystem.TryGetSolution(beaker, "beaker", out var solutionEntity, out var solution));
solutionSystem.TryAddReagent(solutionEntity.Value, "TestReagent", FixedPoint2.New(10));
solutionSystem.SetTemperature(solutionEntity.Value, 500.0f);
Assert.That(solution!.Temperature, Is.LessThanOrEqualTo(293.15f));
solutionSystem.AddThermalEnergy(solutionEntity.Value, 10000.0f);
Assert.That(solution.Temperature, Is.LessThanOrEqualTo(293.15f));
});
}
[Test]
public async Task NormalBeakerAllowsHeating()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var testMap = await pair.CreateTestMap();
await server.WaitPost(() =>
{
var solutionSystem = server.System<SharedSolutionContainerSystem>();
var beaker = server.EntMan.SpawnEntity("TestCryostasisBeaker", testMap.GridCoords);
if (server.EntMan.HasComponent<CryostasisBeakerComponent>(beaker))
server.EntMan.RemoveComponent<CryostasisBeakerComponent>(beaker);
Assert.That(solutionSystem.TryGetSolution(beaker, "beaker", out var solutionEntity, out var solution));
solutionSystem.TryAddReagent(solutionEntity.Value, "TestReagent", FixedPoint2.New(10));
solutionSystem.SetTemperature(solutionEntity.Value, 500.0f);
Assert.That(solution!.Temperature, Is.EqualTo(500.0f));
});
}
}

View file

@ -71,15 +71,15 @@ public static class ClientPackaging
var inputPass = graph.Input; var inputPass = graph.Input;
// Sunrise-Sponsors-Start // Sunrise-Start
var assemblies = new List<string> { "Content.Client", "Content.Shared", "Content.Shared.Database", "Content.Sunrise.Interfaces.Client", "Content.Sunrise.Interfaces.Shared" }; var assemblies = new List<string> { "Content.Client", "Content.Shared", "Content.Shared.Database", "Content.Sunrise.Interfaces.Client", "Content.Sunrise.Interfaces.Shared" };
// Sunrise-Sponsors-End // Sunrise-End
await RobustSharedPackaging.WriteContentAssemblies( await RobustSharedPackaging.WriteContentAssemblies(
inputPass, inputPass,
contentDir, contentDir,
"Content.Client", "Content.Client",
assemblies, // Sunrise-Sponsors assemblies, // Sunrise-Edit
cancel: cancel); cancel: cancel);
await RobustClientPackaging.WriteClientResources( await RobustClientPackaging.WriteClientResources(

View file

@ -55,7 +55,7 @@ public static class ServerPackaging
"Npgsql", "Npgsql",
"Microsoft", "Microsoft",
"NetCord", "NetCord",
"0Harmony", "0Harmony", // Sunrise-Edit
}; };
private static readonly List<string> ServerNotExtraAssemblies = new() private static readonly List<string> ServerNotExtraAssemblies = new()

View file

@ -479,5 +479,7 @@ public enum LogType
/// </summary> /// </summary>
Instrument = 103, Instrument = 103,
// Sunrise-Start
Interactions = 104, Interactions = 104,
// Sunrise-End
} }

View file

@ -2,6 +2,10 @@
license: "CC-BY-SA-3.0" license: "CC-BY-SA-3.0"
copyright: "Taken from TG station" copyright: "Taken from TG station"
source: "https://github.com/tgstation/tgstation/commit/827967c9650c23af64280ad1491405fed8f644c5#diff-6cc910b7cad9ac4333c8d0885fc844746066120b465d8d4ba8f7019169316574" source: "https://github.com/tgstation/tgstation/commit/827967c9650c23af64280ad1491405fed8f644c5#diff-6cc910b7cad9ac4333c8d0885fc844746066120b465d8d4ba8f7019169316574"
- files: ["traitor_wawa.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Taken from TG station, edited by FairlySadPanda (Github)"
source: "https://github.com/tgstation/tgstation/commit/827967c9650c23af64280ad1491405fed8f644c5#diff-6cc910b7cad9ac4333c8d0885fc844746066120b465d8d4ba8f7019169316574"
- files: ["pirate_start.ogg"] - files: ["pirate_start.ogg"]
license: "CC-BY-NC-SA-3.0" license: "CC-BY-NC-SA-3.0"
copyright: "Made by @MIXnikita#1474 (Discord) for SS14" copyright: "Made by @MIXnikita#1474 (Discord) for SS14"
@ -24,5 +28,6 @@
source: "https://www.youtube.com/watch?v=jf1sYGYVLsw" source: "https://www.youtube.com/watch?v=jf1sYGYVLsw"
- files: ["changeling_start.ogg"] - files: ["changeling_start.ogg"]
license: "CC-BY-SA-3.0" license: "CC-BY-SA-3.0"
copyright: "Taken from TG station" copyright: "Taken from TG station at commit https://github.com/tgstation/tgstation/commit/436ba869ebcd0b60b63973fb7562f447ee655205"
source: "https://github.com/tgstation/tgstation/blob/master/sound/ambience/antag/ling_alert.ogg" source: "https://github.com/tgstation/tgstation/blob/master/sound/music/antag/ling_alert.ogg"

View file

@ -1,9 +1,9 @@
- files: - files:
- hyperspace_begin.ogg - hyperspace_begin.ogg
- hyperspace_end.ogg - hyperspace_end.ogg
copyright: 'taken from TauCetiStation and trimmed by Morb0' copyright: '"hyperspace_begin.ogg", and "hyperspace_end.ogg" by /tg/station'
license: CC-BY-SA-3.0 license: CC-BY-SA-3.0
source: https://github.com/TauCetiStation/TauCetiClassic/commit/92d2767dbb39f28540f78d5055e7be1eb7acee98 source: https://github.com/tgstation/tgstation/tree/71a79f1f75902d2ccab27cbffb971b12b7ab042d/sound/runtime/hyperspace
- files: [hyperspace_progress.ogg] - files: [hyperspace_progress.ogg]
copyright: '"hyperspace_progress.ogg" by /tg/station. Modified for looping by metalgearsloth.' copyright: '"hyperspace_progress.ogg" by /tg/station. Modified for looping by metalgearsloth.'

View file

@ -247,12 +247,17 @@
copyright: "Created by mattroks101 for Bee Station. cig_snuff converted to mono" copyright: "Created by mattroks101 for Bee Station. cig_snuff converted to mono"
source: "https://github.com/BeeStation/BeeStation-Hornet/pull/29" source: "https://github.com/BeeStation/BeeStation-Hornet/pull/29"
- files: [changeling_shriek.ogg] - files: [stealthoff.ogg]
copyright: whateverusername0 copyright: 'TGStation at d4f678a1772007ff8d7eddd21cf7218c8e07bfc0'
license: CC-BY-SA-3.0 license: "CC-BY-SA-3.0"
source: https://github.com/whateverusername0/space-station-14-wizden/blob/ling/Resources/Audio/Effects/changeling_shriek.ogg source: https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0
- files: [beeps.ogg, electrical_short_circuit.ogg, electrical_short_circuit2.ogg, ] - files: ["soft_thump.ogg"]
copyright: '"taken from zvukipro.com' license: "CC-BY-4.0"
license: "CC-BY-NC-3.0" copyright: "Clipped by FairlySadPanda (Github) from a sound created by CheChoDj (Freesound)"
source: https://zvukipro.com/predmet/158-zvuk-elektrichestva.html source: "https://freesound.org/people/CheChoDj/sounds/609353/"
- files: [card_drag.ogg]
copyright: 'created by Tao7891; perryprog (GitHub) downmixed to mono'
license: CC0-1.0
source: https://github.com/space-wizards/space-station-14/pull/37363

Binary file not shown.

View file

@ -0,0 +1,27 @@
- files: ["sector11.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "-Sector11 by MashedByMachines. Converted to mono OGG."
source: "https://www.newgrounds.com/audio/listen/312622"
- files: ["mod.flip-flap.ogg"]
license: "Custom"
copyright: "Flip Flap by X-ceed is licensed under a short but clear license (see flip-flap.txt in Audio/Lobby) and is free for non-commercial use. Converted to mono OGG."
source: "http://aminet.net/package/mods/xceed/Flipflap"
- files: ["title3.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Title3 by Cuboos. It is a remix of the song 'Tintin on the Moon'. Converted to mono OGG."
source: "https://www.youtube.com/watch?v=YKVmXn-Gv0M"
- files:
- "constellations.ogg"
- "drifting.ogg"
- "starlight.ogg"
license: "CC-BY-3.0"
copyright: "Constellations by Qwertyquerty. Converted to mono OGG."
source: "https://www.youtube.com/channel/UCPYbhBUGhH7n_G4HLK2YipQ"
- files: ["sunset.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Sunset by PigeonBeans. Exported in Mono OGG."
source: "https://soundcloud.com/pigeonbeans/sunset"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,9 @@
- files: ["endless_space.ogg"] - files: ["thunderdome.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "-Sector11 by MashedByMachines. Converted from MP3 to OGG."
source: "https://www.newgrounds.com/audio/listen/312622"
- files: ["endless_space.ogg"]
license: "CC-BY-3.0" license: "CC-BY-3.0"
copyright: "Endless Space by SolusLunes. Converted from MP3 to OGG." copyright: "Endless Space by SolusLunes. Converted from MP3 to OGG."
source: "https://www.newgrounds.com/audio/listen/67583" source: "https://www.newgrounds.com/audio/listen/67583"
@ -20,3 +25,53 @@
license: "CC-BY-NC-SA-3.0" license: "CC-BY-NC-SA-3.0"
copyright: "Absconditus by ZhayTee. Converted from MP3 to OGG." copyright: "Absconditus by ZhayTee. Converted from MP3 to OGG."
source: "https://bandcamp.zhaytee.net/track/absconditus" source: "https://bandcamp.zhaytee.net/track/absconditus"
- files: ["atomicamnesiammx.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Atomic Amnesia MMX by Philip Dyer. Converted from MP3 to OGG."
source: "https://soundcloud.com/3kliksphilip/atomic-amnesia-mmx-1"
- files: ["singuloose.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Singuloose by Janis Schiedková. Converted from MP3 to OGG."
source: "https://soundcloud.com/js_m/singuloose"
- files: ["title2.ogg"]
license: "Custom"
copyright: "Originally composed by Jonathan Dunn for RoboCop (Game Boy) published by Ocean Software. Remixed by Eric Shumaker for his video Dilbert 3. As of October 9th, 2008 nobody owns the rights to this song and copyright action has never been taken against anyone using this song in their projects."
source: "https://www.youtube.com/watch?v=4o6_8Unj2mQ"
- files: ["title3.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Title3 by Cuboos. It is a remix of the song 'Tintin on the Moon'. Converted from MP3 to OGG."
source: "https://www.youtube.com/watch?v=YKVmXn-Gv0M"
- files: ["comet_haley.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Comet Haley by Stellardrone. Converted from MP3 to OGG."
source: "https://stellardrone.bandcamp.com/track/comet-halley"
- files: ["mod.flip-flap.ogg"]
license: "Custom"
copyright: "Flip Flap by X-ceed is licensed under a short but clear license (see flip-flap.txt in this directory) and is free for non-commercial use. It was converted from MOD to WAV using Schism Tracker, in 16 Bit, Non-Interpolated mode, no output equalizer settings, Ramp volume at start of sample enabled. From there it was converted to OGG Vorbis with `ffmpeg -i flip-flap.wav -q 2.9 flip-flap-renc.ogg` (quality scale chosen to match size of the OGG file being replaced). Non-interpolated mode was chosen as the module has a high enough sample rate to balance it out, but seems muffled in other interpolation modes. If 'Ramp volume at start of sample' is not enabled, a clicking phenomenon results."
source: "http://aminet.net/package/mods/xceed/Flipflap"
- files: ["Spac_Stac.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Spac Stac by Hayabusa. Converted from MP3 to OGG."
source: "https://www.youtube.com/watch?v=grUBe-SZgr0"
- files: ["pwmur.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "phoron will make us rich by Sunbeamstress/Lauren Loveless."
source: "https://soundcloud.com/sunbeamstress/phoron-will-make-us-rich"
- files: ["lasers_rip_apart_the_bulkhead.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "lasers rip apart the bulkhead by Sunbeamstress/Lauren Loveless."
source: "https://soundcloud.com/sunbeamstress/lasers-rip-apart-the-bulkhead"
- files: ["every_light_is_blinking_at_once.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "every light is blinking at once by Sunbeamstress/Lauren Loveless."
source: "https://soundcloud.com/sunbeamstress/every-light-is-blinking-at-once"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -58,6 +58,11 @@
copyright: "Taken from TG station." copyright: "Taken from TG station."
source: "https://github.com/tgstation/tgstation/blob/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0/sound/machines/warning-buzzer.ogg" source: "https://github.com/tgstation/tgstation/blob/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0/sound/machines/warning-buzzer.ogg"
- files: ["warning_buzzer_xenoborg.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Made by Toast (Discord)"
source: "https://github.com/space-wizards/space-station-14/pull/36935"
- files: ["anomaly_sync_connect.ogg"] - files: ["anomaly_sync_connect.ogg"]
license: "CC0-1.0" license: "CC0-1.0"
copyright: "Created by newagesoup, convert to ogg mono by TheShuEd" copyright: "Created by newagesoup, convert to ogg mono by TheShuEd"
@ -108,7 +113,7 @@
copyright: "cmorris035" copyright: "cmorris035"
source: "https://freesound.org/people/cmorris035/sounds/319152/" source: "https://freesound.org/people/cmorris035/sounds/319152/"
- files: ["airlock_open.ogg", "airlock_close.ogg"] - files: ["airlock_open.ogg", "airlock_close.ogg", "airlock_deny.ogg"]
license: "CC-BY-SA-3.0" license: "CC-BY-SA-3.0"
copyright: "/tg/station" copyright: "/tg/station"
source: "https://github.com/tgstation/tgstation/tree/5f5002b21253354c20ea224be3f604d79299b37e/sound/machines" source: "https://github.com/tgstation/tgstation/tree/5f5002b21253354c20ea224be3f604d79299b37e/sound/machines"
@ -158,11 +163,6 @@
copyright: "dakamakat on freesound.org" copyright: "dakamakat on freesound.org"
source: "https://freesound.org/people/Dakamakat/sounds/717370/" source: "https://freesound.org/people/Dakamakat/sounds/717370/"
- files: ["airlock_deny.ogg"]
license: "CC-BY-SA-3.0"
copyright: "/vgstation-coders/vgstation13"
source: "https://github.com/vgstation-coders/vgstation13/blob/Bleeding-Edge/sound/machines/denied.ogg"
- files: - files:
- twobeep.ogg - twobeep.ogg
- chime.ogg - chime.ogg
@ -196,12 +196,6 @@
license: "CC0-1.0" license: "CC0-1.0"
copyright: "Created by fspera, converted to OGG and modified by chromiumboy." copyright: "Created by fspera, converted to OGG and modified by chromiumboy."
source: "https://freesound.org/people/fspera/sounds/528111/" source: "https://freesound.org/people/fspera/sounds/528111/"
- files: ["energyshield_up.ogg"]
license: "CC0-1.0"
copyright: "unfa on freesound.org"
source: "https://freesound.org/people/unfa/sounds/584173/"
- files: - files:
- airlock_emergencyoff.ogg - airlock_emergencyoff.ogg
- airlock_emergencyon.ogg - airlock_emergencyon.ogg
@ -220,17 +214,3 @@
license: "CC-BY-3.0" license: "CC-BY-3.0"
copyright: "Created by Tomlija, converted to OGG and modified by themias." copyright: "Created by Tomlija, converted to OGG and modified by themias."
source: "https://freesound.org/people/Tomlija/sounds/99565/" source: "https://freesound.org/people/Tomlija/sounds/99565/"
- files: ["energyshield_down.ogg"]
license: "CC-BY-4.0"
copyright: "SilverIllusionist on freesound.org"
source: "https://freesound.org/people/SilverIllusionist/sounds/673556/"
- files: ["energyshield_ambient.ogg"]
license: "CC0-1.0"
copyright: "julianmateo_ on freesound.org"
source: "https://freesound.org/people/julianmateo_/sounds/524165/"
- files: ["energyshield_parry.ogg"]
license: "CC-BY-4.0"
copyright: "Robinhood76 on freesound.org"
source: "https://freesound.org/people/Robinhood76/sounds/107613/"

View file

@ -1,8 +1,3 @@
- files: ["emergency_meeting.ogg"]
license: "CC-BY-NC-SA-3.0"
copyright: "Taken from TG station."
source: "https://github.com/tgstation/tgstation/commit/97945e7d08d1457ffc27e46526a48c0453cc95e4"
- files: ["tension_session.ogg"] - files: ["tension_session.ogg"]
license: "CC-BY-3.0" license: "CC-BY-3.0"
copyright: "Created by qwertyquerty" copyright: "Created by qwertyquerty"

View file

@ -33,7 +33,7 @@
copyright: "Taken from vgstation" copyright: "Taken from vgstation"
source: "https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730" source: "https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730"
- files: ["shotgun.ogg"] - files: ["estocshot.ogg"]
license: "CC-BY-SA-3.0" license: "CC-BY-SA-3.0"
copyright: "Taken from tgstation" copyright: "machinegun-one-shot.wav by DeltaCode. Converted to .OGG and MONO by august-sun"
source: "https://github.com/tgstation/tgstation/blob/5736656139713c802033b9457a2a9d058211bd85/sound/weapons/gun/shotgun/shot.ogg" source: "https://freesound.org/people/DeltaCode/sounds/668347/"

Binary file not shown.

View file

@ -1,5 +0,0 @@
# disease
shop-disease-category-infect = Infectie
shop-disease-category-symptoms = Symptomen
shop-disease-category-evolution = Evolutie
shop-disease-category-infection = Infectie

View file

@ -2379,7 +2379,7 @@ entities:
- type: Transform - type: Transform
pos: -0.17729092,2.357732 pos: -0.17729092,2.357732
parent: 1 parent: 1
- proto: GrenadeFragTimer - proto: GrenadeFrag
entities: entities:
- uid: 58 - uid: 58
components: components:

Some files were not shown because too many files have changed in this diff Show more