From dc86baaaf55925240bb1c64505297b4490ffe774 Mon Sep 17 00:00:00 2001 From: Helm4142 <158806576+Helm4142@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:41:07 +0600 Subject: [PATCH 01/46] new (#2581) Co-authored-by: Helm4142 --- .../Smokeables/Cigarettes/cigarette.yml | 9 +++++++++ .../Consumable/Smokeables/Cigars/cigar.yml | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml index e2b5abb19cff..ca182249c723 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml @@ -62,6 +62,15 @@ solutions: smokable: maxVol: 20 + food: #SS220-Eat-Cigarettes-begin + maxVol: 20 + reagents: + - ReagentId: GastroToxin + Quantity: 1 + - type: Food + - type: FlavorProfile + flavors: + - punishment #SS220-Eat-Cigarettes-end - type: Tag tags: - Cigarette diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml index dad295b16693..e7d90bd946a2 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml @@ -36,6 +36,15 @@ solutions: smokable: maxVol: 20 + food: #SS220-Eat-Cigarettes-begin + maxVol: 20 + reagents: + - ReagentId: GastroToxin + Quantity: 1 + - type: Food + - type: FlavorProfile + flavors: + - punishment #SS220-Eat-Cigarettes-end - type: Tag tags: - Cigar @@ -72,3 +81,12 @@ solutions: smokable: maxVol: 20 + food: #SS220-Eat-Cigarettes-begin + maxVol: 20 + reagents: + - ReagentId: GastroToxin + Quantity: 1 + - type: Food + - type: FlavorProfile + flavors: + - punishment #SS220-Eat-Cigarettes-end \ No newline at end of file From 8b92603595687a5e975143b285dc925bed0f78ac Mon Sep 17 00:00:00 2001 From: Maxon Date: Wed, 19 Feb 2025 15:42:12 +0000 Subject: [PATCH 02/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 4ef907b23dc1..445901fe6464 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,14 +1,4 @@ Entries: -- author: ReeZii - changes: - - message: "\u041F\u0430\u0440\u0430\u043C\u0435\u0434\u0438\u043A\u0443 \u0442\u0435\ - \u043F\u0435\u0440\u044C \u043D\u0435 \u0432\u044B\u043F\u0430\u0434\u0430\u0435\ - \u0442 \u0446\u0435\u043B\u044C \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u0442\ - \u0438\u0432\u043D\u044B\u0439 \u043C\u043E\u043D\u0438\u0442\u043E\u0440" - type: Fix - id: 320 - time: '2024-07-24T18:06:45.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1444 - author: Lancevrot, AlwyAnri, MiraHell changes: - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u044D\u043A\u0438\ @@ -6168,3 +6158,12 @@ id: 821 time: '2025-02-18T20:33:09.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2578 +- author: Helm + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0431\u044B\u0447\u043A\u0438\ + \ \u0441\u044A\u0435\u0434\u043E\u0431\u043D\u044B! \u041D\u0430\u0432\u0435\ + \u0440\u043D\u043E\u0435..." + type: Tweak + id: 822 + time: '2025-02-19T15:41:07.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2581 From 3e9323d1b14efa93984a215f12659958412f7110 Mon Sep 17 00:00:00 2001 From: UrPrice Date: Wed, 19 Feb 2025 20:01:37 +0300 Subject: [PATCH 03/46] rmNeedsLabels --- .github/workflows/labeler-mapping-issues-and-untriaged.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/labeler-mapping-issues-and-untriaged.yml b/.github/workflows/labeler-mapping-issues-and-untriaged.yml index 797605851912..8ef4667e8bfb 100644 --- a/.github/workflows/labeler-mapping-issues-and-untriaged.yml +++ b/.github/workflows/labeler-mapping-issues-and-untriaged.yml @@ -41,11 +41,4 @@ jobs: issue_number: context.issue.number, assignees: [selectedOption.assignee] }); // added assignee - } else { - await github.rest.issues.addLabels({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - labels: ["Status: Needs Labels"] - }); // add "Status: Needs Labels" } From 11a9875121ceffd027d3474d1d9b5416b6ee6421 Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Wed, 19 Feb 2025 19:54:15 +0200 Subject: [PATCH 04/46] fix duplicate doafters for lockpick (#2589) --- Content.Server/SS220/LockPick/Systems/LockpickSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/SS220/LockPick/Systems/LockpickSystem.cs b/Content.Server/SS220/LockPick/Systems/LockpickSystem.cs index 623f04ff11e7..ad4ad16fa171 100644 --- a/Content.Server/SS220/LockPick/Systems/LockpickSystem.cs +++ b/Content.Server/SS220/LockPick/Systems/LockpickSystem.cs @@ -37,6 +37,7 @@ private void OnAfterInteract(Entity ent, ref AfterInteractEve BreakOnDamage = true, BreakOnMove = true, NeedHand = true, + DuplicateCondition = DuplicateConditions.None, }); } From b11055c65fa9f8692ae0c660802fb29877547778 Mon Sep 17 00:00:00 2001 From: Andrey Ushakov <10843461+Werzet@users.noreply.github.com> Date: Thu, 20 Feb 2025 04:03:33 +1000 Subject: [PATCH 05/46] Add server statistic endpoint (#2583) * add status count * fix gameticker inject --- .../ServerStatusResponseModel.cs | 10 + .../BackendApi/ServerControlController.cs | 308 ++++++++++-------- 2 files changed, 187 insertions(+), 131 deletions(-) create mode 100644 Content.Server/SS220/BackendApi/ResponseModels/ServerStatusResponseModel.cs diff --git a/Content.Server/SS220/BackendApi/ResponseModels/ServerStatusResponseModel.cs b/Content.Server/SS220/BackendApi/ResponseModels/ServerStatusResponseModel.cs new file mode 100644 index 000000000000..ef113ad492ba --- /dev/null +++ b/Content.Server/SS220/BackendApi/ResponseModels/ServerStatusResponseModel.cs @@ -0,0 +1,10 @@ +namespace Content.Server.SS220.BackendApi.ResponseModels; + +internal sealed class ServerStatusResponseModel +{ + public int PlayersCount { get; set; } + + public TimeSpan RoundDuration { get; set; } + + public int AdminCount { get; set; } +} diff --git a/Content.Server/SS220/BackendApi/ServerControlController.cs b/Content.Server/SS220/BackendApi/ServerControlController.cs index ecb5a2550e5d..ed6a2f813198 100644 --- a/Content.Server/SS220/BackendApi/ServerControlController.cs +++ b/Content.Server/SS220/BackendApi/ServerControlController.cs @@ -1,203 +1,249 @@ // © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt -using System.Net.Http; +using System.Linq; using System.Net; +using System.Net.Http; using System.Threading.Tasks; +using Content.Server.Administration.Managers; +using Content.Server.GameTicking; +using Content.Server.SS220.BackendApi; +using Content.Server.SS220.BackendApi.RequestModels; +using Content.Server.SS220.BackendApi.ResponseModels; +using Robust.Server.Console; +using Robust.Server.Player; using Robust.Server.ServerStatus; +using Robust.Shared; using Robust.Shared.Asynchronous; using Robust.Shared.Configuration; -using Robust.Shared; using Robust.Shared.Console; -using Robust.Server.Console; using Robust.Shared.Utility; -using Content.Server.SS220.BackendApi; -using Robust.Server.Player; -using Content.Server.SS220.BackendApi.RequestModels; -namespace Content.Server.SS220.BackEndApi +namespace Content.Server.SS220.BackEndApi; + +public sealed partial class ServerControlController : IPostInjectInit { - public sealed partial class ServerControlController : IPostInjectInit - { - [Dependency] private readonly IStatusHost _statusHost = default!; - [Dependency] private readonly IConfigurationManager _configurationManager = default!; - [Dependency] private readonly ITaskManager _taskManager = default!; - [Dependency] private readonly IServerConsoleHost _serverConsoleHost = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IStatusHost _statusHost = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly ITaskManager _taskManager = default!; + [Dependency] private readonly IServerConsoleHost _serverConsoleHost = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; - private string? _watchdogToken; - private string? _watchdogKey; + private string? _watchdogToken; + private string? _watchdogKey; - private ISawmill _sawmill = default!; + private ISawmill _sawmill = default!; - private static string ConsoleCommand => "/console-command"; - private static string PlayersCountCommand => "/players"; + private static string ConsoleCommand => "/console-command"; + private static string PlayersCountCommand => "/players"; + private static string ServerStatus => "/server-status"; - private readonly HashSet _serverCommands = new() { ConsoleCommand, PlayersCountCommand }; + private readonly HashSet _postCommands = [ConsoleCommand, PlayersCountCommand]; - public void Initialize() - { - _configurationManager.OnValueChanged(CVars.WatchdogToken, _ => UpdateToken()); - _configurationManager.OnValueChanged(CVars.WatchdogKey, _ => UpdateToken()); + private readonly HashSet _getCommands = [ServerStatus]; + + public void Initialize() + { + _configurationManager.OnValueChanged(CVars.WatchdogToken, _ => UpdateToken()); + _configurationManager.OnValueChanged(CVars.WatchdogKey, _ => UpdateToken()); + + UpdateToken(); + } + + public void PostInject() + { + _sawmill = Logger.GetSawmill("serverController"); + _statusHost.AddHandler(BackRequestHandler); + } - UpdateToken(); + private async Task BackRequestHandler(IStatusHandlerContext context) + { + if ((context.RequestMethod != HttpMethod.Post || !_postCommands.Contains(context.Url.AbsolutePath)) && + context.RequestMethod != HttpMethod.Get || !_getCommands.Contains(context.Url.AbsolutePath)) + { + return false; } - public void PostInject() + if (!await TryAuth(context)) { - _sawmill = Logger.GetSawmill("serverController"); - _statusHost.AddHandler(BackRequestHandler); + return false; } - private async Task BackRequestHandler(IStatusHandlerContext context) + try { - if (context.RequestMethod != HttpMethod.Post || !_serverCommands.Contains(context.Url!.AbsolutePath)) + if (context.Url.AbsolutePath == ConsoleCommand) { - return false; + await ConsoleCommandHandler(context); } - - try + else if (context.Url.AbsolutePath == PlayersCountCommand) { - if (context.Url!.AbsolutePath == ConsoleCommand) - { - await ConsoleCommandHandler(context); - } - else if (context.Url!.AbsolutePath == PlayersCountCommand) - { - await PlayersCountHandler(context); - } + await PlayersCountHandler(context); } - catch (Exception exc) + else if (context.Url.AbsolutePath == ServerStatus) { - _sawmill.Error(exc.Message); - - await context.RespondAsync(exc.Message, HttpStatusCode.InternalServerError); + await ServerStatusHandler(context); } + } + catch (Exception exc) + { + _sawmill.Error(exc.Message); - return true; + await context.RespondAsync(exc.Message, HttpStatusCode.InternalServerError); } - private async Task PlayersCountHandler(IStatusHandlerContext context) + return true; + } + + private async Task TryAuth(IStatusHandlerContext context) + { + var auth = context.RequestHeaders["WatchdogToken"]; + + if (auth != _watchdogToken) { - PlayersCountRequestModel request; + _sawmill.Info(@"Failed auth: ""{0}"" vs ""{1}""", auth, _watchdogToken); + await context.RespondErrorAsync(HttpStatusCode.Unauthorized); + return false; + } - try - { - request = await context.RequestBodyJsonAsync() ?? throw new ArgumentNullException("body", "Parse result is null"); - } - catch (Exception exc) - { - await context.RespondAsync($"Error on comand parameters parse. {Environment.NewLine}{exc.Message}", HttpStatusCode.BadRequest); + return true; + } - return; - } + private async Task PlayersCountHandler(IStatusHandlerContext context) + { + PlayersCountRequestModel request; - if (!await TryAuth(context, request)) - { - return; - } + try + { + request = await context.RequestBodyJsonAsync() ?? throw new ArgumentNullException("body", "Parse result is null"); + } + catch (Exception exc) + { + await context.RespondAsync($"Error on comand parameters parse. {Environment.NewLine}{exc.Message}", HttpStatusCode.BadRequest); - await context.RespondAsync(_playerManager.PlayerCount.ToString(), HttpStatusCode.OK); + return; } - private async Task TryAuth(IStatusHandlerContext context, IBasicRequestModel requestModel) - { - if (string.IsNullOrWhiteSpace(requestModel.WatchDogToken)) - { - _sawmill.Info(@"Failed auth: no auth info"); - await context.RespondErrorAsync(HttpStatusCode.Unauthorized); - return false; - } + //if (!await TryAuth(context, request)) + //{ + // return; + //} - if (requestModel.WatchDogToken != _watchdogToken) - { - _sawmill.Info(@"Failed auth: ""{0}"" vs ""{1}""", requestModel.WatchDogToken, _watchdogToken); - await context.RespondErrorAsync(HttpStatusCode.Unauthorized); - return false; - } + await context.RespondAsync(_playerManager.PlayerCount.ToString(), HttpStatusCode.OK); + } - return true; + private async Task TryAuth(IStatusHandlerContext context, IBasicRequestModel requestModel) + { + if (string.IsNullOrWhiteSpace(requestModel.WatchDogToken)) + { + _sawmill.Info(@"Failed auth: no auth info"); + await context.RespondErrorAsync(HttpStatusCode.Unauthorized); + return false; } - private async Task ConsoleCommandHandler(IStatusHandlerContext context) + if (requestModel.WatchDogToken != _watchdogToken) { - ConsoleCommandRequestModel request; + _sawmill.Info(@"Failed auth: ""{0}"" vs ""{1}""", requestModel.WatchDogToken, _watchdogToken); + await context.RespondErrorAsync(HttpStatusCode.Unauthorized); + return false; + } - try - { - request = await context.RequestBodyJsonAsync() ?? throw new ArgumentNullException("body", "Parse result is null"); - } - catch (Exception exc) - { - await context.RespondAsync($"Error on comand parameters parse. {Environment.NewLine}{exc.Message}", HttpStatusCode.BadRequest); + return true; + } - return; - } + private async Task ConsoleCommandHandler(IStatusHandlerContext context) + { + ConsoleCommandRequestModel request; - if (!await TryAuth(context, request)) - { - return; - } + try + { + request = await context.RequestBodyJsonAsync() ?? throw new ArgumentNullException("body", "Parse result is null"); + } + catch (Exception exc) + { + await context.RespondAsync($"Error on comand parameters parse. {Environment.NewLine}{exc.Message}", HttpStatusCode.BadRequest); - var command = request.Command; + return; + } - if (string.IsNullOrWhiteSpace(command)) - { - await context.RespondAsync("Command can't be empty", HttpStatusCode.BadRequest); + //if (!await TryAuth(context, request)) + //{ + // return; + //} - return; - } + var command = request.Command; - var args = new List(); + if (string.IsNullOrWhiteSpace(command)) + { + await context.RespondAsync("Command can't be empty", HttpStatusCode.BadRequest); - CommandParsing.ParseArguments(command, args); + return; + } - var commandName = args[0]; + var args = new List(); - if (!_serverConsoleHost.AvailableCommands.TryGetValue(commandName, out var conCmd)) - { - await context.RespondAsync($"Unknown command '{commandName}'", HttpStatusCode.BadRequest); + CommandParsing.ParseArguments(command, args); - return; - } + var commandName = args[0]; - args.RemoveAt(0); - var cmdArgs = args.ToArray(); + if (!_serverConsoleHost.AvailableCommands.TryGetValue(commandName, out var conCmd)) + { + await context.RespondAsync($"Unknown command '{commandName}'", HttpStatusCode.BadRequest); - _taskManager.RunOnMainThread(async () => await RunConsoleCommand(conCmd, command, cmdArgs, context)); + return; } - private async Task RunConsoleCommand(IConsoleCommand conCmd, string command, string[] cmdArgs, IStatusHandlerContext context) + args.RemoveAt(0); + var cmdArgs = args.ToArray(); + + _taskManager.RunOnMainThread(async () => await RunConsoleCommand(conCmd, command, cmdArgs, context)); + } + + private async Task RunConsoleCommand(IConsoleCommand conCmd, string command, string[] cmdArgs, IStatusHandlerContext context) + { + try { - try - { - var shell = new ConsoleShell(_serverConsoleHost, session: null, isLocal: true); + var shell = new ConsoleShell(_serverConsoleHost, session: null, isLocal: true); - var controllerConsole = new ControllerConsole(shell); + var controllerConsole = new ControllerConsole(shell); - conCmd.Execute(controllerConsole, command, cmdArgs); + conCmd.Execute(controllerConsole, command, cmdArgs); - if (!string.IsNullOrWhiteSpace(controllerConsole.ErrorMsg)) - { - await context.RespondAsync(controllerConsole.ErrorMsg, HttpStatusCode.InternalServerError); - } - else - { - await context.RespondAsync(controllerConsole.ResultMsg, HttpStatusCode.OK); - } + if (!string.IsNullOrWhiteSpace(controllerConsole.ErrorMsg)) + { + await context.RespondAsync(controllerConsole.ErrorMsg, HttpStatusCode.InternalServerError); } - catch (Exception exc) + else { - _sawmill.Error(exc.Message); + await context.RespondAsync(controllerConsole.ResultMsg, HttpStatusCode.OK); } } + catch (Exception exc) + { + _sawmill.Error(exc.Message); + } + } + + private async Task ServerStatusHandler(IStatusHandlerContext context) + { + var ticker = _entityManager.System(); - private void UpdateToken() + var status = new ServerStatusResponseModel { - var tok = _configurationManager.GetCVar(CVars.WatchdogToken); - var key = _configurationManager.GetCVar(CVars.WatchdogKey); + PlayersCount = _playerManager.PlayerCount, + AdminCount = _adminManager.ActiveAdmins.Select(x => _adminManager.GetAdminData(x)).Count(x => x is not null && !x.Stealth), + RoundDuration = ticker.RoundDuration() + }; - _watchdogToken = string.IsNullOrEmpty(tok) ? null : tok; - _watchdogKey = string.IsNullOrEmpty(key) ? null : key; - } + await context.RespondJsonAsync(status, HttpStatusCode.OK); + } + + private void UpdateToken() + { + var tok = _configurationManager.GetCVar(CVars.WatchdogToken); + var key = _configurationManager.GetCVar(CVars.WatchdogKey); + + _watchdogToken = string.IsNullOrEmpty(tok) ? null : tok; + _watchdogKey = string.IsNullOrEmpty(key) ? null : key; } } From 58181e9db83479c47a7f1e21a01e4012600570b5 Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:29:13 +0200 Subject: [PATCH 06/46] FIX: Formatting time in lobby (#2590) --- Content.Shared/Localizations/ContentLocalizationManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Localizations/ContentLocalizationManager.cs b/Content.Shared/Localizations/ContentLocalizationManager.cs index b662a7a7bf7d..9daab4c6afcb 100644 --- a/Content.Shared/Localizations/ContentLocalizationManager.cs +++ b/Content.Shared/Localizations/ContentLocalizationManager.cs @@ -198,7 +198,7 @@ public static string FormatDirection(Direction dir) public static string FormatPlaytime(TimeSpan time) { var hours = (int)time.TotalHours; - var minutes = (int)Math.Ceiling(time.TotalMinutes); + var minutes = time.Minutes; //ss220 formatting time in lobby return Loc.GetString($"zzzz-fmt-playtime", ("hours", hours), ("minutes", minutes)); } From df1967f7c0fe207099c15bae0d476dca22197226 Mon Sep 17 00:00:00 2001 From: Maxon Date: Wed, 19 Feb 2025 19:30:18 +0000 Subject: [PATCH 07/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 445901fe6464..48e1c838805b 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,13 +1,4 @@ Entries: -- author: Lancevrot, AlwyAnri, MiraHell - changes: - - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u044D\u043A\u0438\ - \u043F\u0438\u0440\u043E\u0432\u043A\u0430 \u0442\u0435\u0440\u043C\u0430\u043B\ - \u044C\u043D\u043E\u0433\u043E \"\u0437\u0440\u0435\u043D\u0438\u044F\"." - type: Add - id: 321 - time: '2024-07-24T18:06:19.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1131 - author: kirus59 changes: - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0430\ @@ -6167,3 +6158,14 @@ id: 822 time: '2025-02-19T15:41:07.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2581 +- author: ReeZii + changes: + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0435\ + \u0432\u0435\u0440\u043D\u043E\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\ + \u0435\u043D\u0438\u0435 \u043D\u0430\u0438\u0433\u0440\u0430\u043D\u043D\u043E\ + \u0433\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0432 \u043B\u043E\u0431\ + \u0431\u0438" + type: Fix + id: 823 + time: '2025-02-19T19:29:14.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2590 From 12836dea9fd2068f827f0c0a6ad5d21c3a91b6ac Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:43:28 +0200 Subject: [PATCH 08/46] ADD: Verb to shuffle deck cards (#2580) --- .../GameCardsColodeComponent.cs | 6 +++ .../GameCardsColode/GameCardsColodeSystem.cs | 54 +++++++++++++++++++ Resources/Locale/ru-RU/ss220/cards/cards.ftl | 1 + .../Locale/ru-RU/ss220/verbs/verb-system.ftl | 4 +- .../SS220/Entities/Objects/Fun/cards.yml | 2 + 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 Content.Server/SS220/GameCardsColode/GameCardsColodeComponent.cs create mode 100644 Content.Server/SS220/GameCardsColode/GameCardsColodeSystem.cs create mode 100644 Resources/Locale/ru-RU/ss220/cards/cards.ftl diff --git a/Content.Server/SS220/GameCardsColode/GameCardsColodeComponent.cs b/Content.Server/SS220/GameCardsColode/GameCardsColodeComponent.cs new file mode 100644 index 000000000000..be93b3161bd4 --- /dev/null +++ b/Content.Server/SS220/GameCardsColode/GameCardsColodeComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server.SS220.GameCardsColode; + +[RegisterComponent] +public sealed partial class GameCardsColodeComponent : Component +{ +} diff --git a/Content.Server/SS220/GameCardsColode/GameCardsColodeSystem.cs b/Content.Server/SS220/GameCardsColode/GameCardsColodeSystem.cs new file mode 100644 index 000000000000..2e3c17b20087 --- /dev/null +++ b/Content.Server/SS220/GameCardsColode/GameCardsColodeSystem.cs @@ -0,0 +1,54 @@ +using Content.Server.Popups; +using Content.Shared.Storage; +using Content.Shared.Verbs; +using Robust.Server.Containers; +using Robust.Shared.Random; + +namespace Content.Server.SS220.GameCardsColode; + +public sealed class GameCardsColodeSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + public override void Initialize() + { + SubscribeLocalEvent>(OnVerb); + } + + private void OnVerb(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanInteract || !TryComp(ent.Owner, out var storage)) + return; + + if (storage.Container.ContainedEntities.Count == 0) + return; + + var user = args.User; + + var verb = new Verb + { + Text = Loc.GetString("verb-shuffle-cards"), + Act = () => ShuffleDeck(ent.Owner, user), + }; + + args.Verbs.Add(verb); + } + + private void ShuffleDeck(EntityUid deck, EntityUid user) + { + if (!TryComp(deck, out var storage)) + return; + + var deckCards = _container.EmptyContainer(storage.Container); + _random.Shuffle(deckCards); + + foreach (var card in deckCards) + { + _container.Insert(card, storage.Container); + } + + _popup.PopupEntity(Loc.GetString("cards-shuffled"), user); + } +} diff --git a/Resources/Locale/ru-RU/ss220/cards/cards.ftl b/Resources/Locale/ru-RU/ss220/cards/cards.ftl new file mode 100644 index 000000000000..731595421a4a --- /dev/null +++ b/Resources/Locale/ru-RU/ss220/cards/cards.ftl @@ -0,0 +1 @@ +cards-shuffled = Колода перемешана diff --git a/Resources/Locale/ru-RU/ss220/verbs/verb-system.ftl b/Resources/Locale/ru-RU/ss220/verbs/verb-system.ftl index 3458203a78a2..57559a90303e 100644 --- a/Resources/Locale/ru-RU/ss220/verbs/verb-system.ftl +++ b/Resources/Locale/ru-RU/ss220/verbs/verb-system.ftl @@ -1,2 +1,4 @@ verb-categories-attach-cart = Прикрепить -verb-categories-deattach-cart = Открепить \ No newline at end of file +verb-categories-deattach-cart = Открепить + +verb-shuffle-cards = Перемешать diff --git a/Resources/Prototypes/SS220/Entities/Objects/Fun/cards.yml b/Resources/Prototypes/SS220/Entities/Objects/Fun/cards.yml index a0b36a21fb0b..e63d20061f5c 100644 --- a/Resources/Prototypes/SS220/Entities/Objects/Fun/cards.yml +++ b/Resources/Prototypes/SS220/Entities/Objects/Fun/cards.yml @@ -23,6 +23,7 @@ name: Колода Карт description: Это твои карты. Помещает до 20 карт components: + - type: GameCardsColode - type: Sprite sprite: SS220/Objects/Fun/cards.rsi state: InHand @@ -50,6 +51,7 @@ name: Упаковка карт description: Сыграем в покер? components: + - type: GameCardsColode - type: Sprite sprite: SS220/Objects/Fun/cards.rsi state: colode From 151223c8c62245362d44f4870cd0f3c52a25cbef Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:43:47 +0200 Subject: [PATCH 09/46] FIX: MiGo Damage by BarbedWire in Astral (#2584) * FIX: MiGo Damage by BarbedWire in Astral * fix commit --- Content.Server/SS220/CultYogg/MiGo/MiGoSystem.cs | 3 ++- Resources/Prototypes/Entities/Objects/Misc/kudzu.yml | 6 ++++++ .../SS220/Entities/Structures/Specific/barbed_wire.yml | 6 ++++++ Resources/Prototypes/tags.yml | 5 +++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Content.Server/SS220/CultYogg/MiGo/MiGoSystem.cs b/Content.Server/SS220/CultYogg/MiGo/MiGoSystem.cs index 3a376ea42652..bb7beebf0948 100644 --- a/Content.Server/SS220/CultYogg/MiGo/MiGoSystem.cs +++ b/Content.Server/SS220/CultYogg/MiGo/MiGoSystem.cs @@ -56,6 +56,7 @@ public override void ChangeForm(EntityUid uid, MiGoComponent comp, bool isMateri { //no opening door during astral _tag.AddTag(uid, "DoorBumpOpener"); + _tag.RemoveTag(uid, "MiGoInAstral"); comp.MaterializationTime = null; comp.AlertTime = 0; @@ -82,7 +83,7 @@ public override void ChangeForm(EntityUid uid, MiGoComponent comp, bool isMateri { comp.AudioPlayed = false; _tag.RemoveTag(uid, "DoorBumpOpener"); - + _tag.AddTag(uid, "MiGoInAstral"); _alerts.ShowAlert(uid, comp.AstralAlert); //no phisyc during astral diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index 73c300038ae5..c08ca1732b96 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -87,6 +87,10 @@ ignoreWhitelist: components: - IgnoreKudzu + #ss220 fix damage migo in astral start + tags: + - MiGoInAstral + #ss220 fix damage migo in astral end - type: Food requiredStomachs: 2 # ruminants have 4 stomachs but i dont care to give them literally 4 stomachs. 2 is good delay: 0.5 @@ -208,6 +212,7 @@ ignoreWhitelist: tags: - Flesh + - MiGoInAstral #ss220 fix damage migo in astral - type: Kudzu growthTickChance: 0.1 spreadChance: 0.4 @@ -241,6 +246,7 @@ ignoreWhitelist: tags: - Flesh + - MiGoInAstral #ss220 fix damage migo in astral - type: Food # delightfully devilish ! delay: 0.5 - type: SolutionContainerManager diff --git a/Resources/Prototypes/SS220/Entities/Structures/Specific/barbed_wire.yml b/Resources/Prototypes/SS220/Entities/Structures/Specific/barbed_wire.yml index 4a0833d17cf9..26f71b67ef32 100644 --- a/Resources/Prototypes/SS220/Entities/Structures/Specific/barbed_wire.yml +++ b/Resources/Prototypes/SS220/Entities/Structures/Specific/barbed_wire.yml @@ -72,6 +72,9 @@ - !type:DoActsBehavior acts: [ "Destruction" ] - type: DamageContacts + ignoreWhitelist: + tags: + - MiGoInAstral damage: types: Slash: 5 @@ -79,6 +82,9 @@ - type: SpeedModifierContacts walkSpeedModifier: 0.2 sprintSpeedModifier: 0.2 + ignoreWhitelist: + tags: + - MiGoInAstral - type: Appearance - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index a38b8cb482e7..139ab0a9c92e 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1485,4 +1485,9 @@ id: HolofanProjectorSecurity # SS220 Fix #2009 end +# ss220 migo damage in astral fix start +- type: Tag + id: MiGoInAstral +# ss220 migo damage in astral fix end + # ALPHABETICAL From 84d06df405925b373126b84cbfb73c02fbbcd6ae Mon Sep 17 00:00:00 2001 From: Maxon Date: Wed, 19 Feb 2025 19:44:52 +0000 Subject: [PATCH 10/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 43 ++++++++++++++-------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 48e1c838805b..7933ea10b1b3 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,25 +1,4 @@ Entries: -- author: kirus59 - changes: - - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043D\u0430\ - \u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u043B\u0430\u043D\u0435\u0442\u044B\ - \ \u0432 \u0446\u0435\u043B\u044F\u0445 \u0441\u0442\u0430\u043D\u0446\u0438\ - \u0438." - type: Fix - id: 322 - time: '2024-07-24T19:24:26.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1452 -- author: kirus59 - changes: - - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D \u043F\u0435\u0440\ - \u0435\u0432\u043E\u0440\u043E\u0442 \u0441\u043F\u0440\u0430\u0439\u0442\u0430\ - \ \u0433\u043E\u0441\u0442\u0430, \u043F\u0440\u0438 \u043F\u0435\u0440\u0435\ - \u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0438 \u043F\u043E\u043B\u044F \u0437\ - \u0440\u0435\u043D\u0438\u044F" - type: Fix - id: 323 - time: '2024-07-24T19:27:17.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1454 - author: UrPrice changes: - message: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0430 \u0432\u043E\u0437\u043C\ @@ -6169,3 +6148,25 @@ id: 823 time: '2025-02-19T19:29:14.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2590 +- author: ReeZii + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u041C\u0438-\u0413\u043E \u043D\ + \u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 \u0443\u0440\u043E\u043D\ + \ \u0438 \u043D\u0435 \u0437\u0430\u043C\u0435\u0434\u043B\u044F\u0435\u0442\ + \u0441\u044F \u043E\u0442 \u043A\u043E\u043B\u044E\u0447\u0435\u0439 \u043F\u0440\ + \u043E\u0432\u043E\u043B\u043E\u043A\u0438 \u0432 \u0430\u0441\u0442\u0440\u0430\ + \u043B\u0435" + type: Fix + id: 824 + time: '2025-02-19T19:43:47.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2584 +- author: ReeZii + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043A\u043D\u043E\ + \u043F\u043A\u0430 \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0442\u0430\u0441\ + \u043E\u0432\u043A\u0438 \u043A\u0430\u0440\u0442 \u0432 \u043A\u043E\u043B\u043E\ + \u0434\u0435" + type: Add + id: 825 + time: '2025-02-19T19:43:28.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2580 From d5c2ed0957859e4fe35716661d77f0a6abc80115 Mon Sep 17 00:00:00 2001 From: Tris0r <163807362+Tris0r@users.noreply.github.com> Date: Thu, 20 Feb 2025 00:45:32 +0500 Subject: [PATCH 11/46] =?UTF-8?q?=D0=A2=D0=95=D0=9D=D0=98=20(#2591)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../combat.rsi/equipped-HAND-kangaroo.png | Bin 613 -> 649 bytes .../Hands/Gloves/combat.rsi/equipped-HAND.png | Bin 355 -> 378 bytes .../Clothing/Hands/Gloves/combat.rsi/icon.png | Bin 447 -> 469 bytes .../Clothing/Hands/Gloves/combat.rsi/meta.json | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/equipped-HAND-kangaroo.png b/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/equipped-HAND-kangaroo.png index ca30b694087b6e2ed2c11c2a4c631ccda21d4448..bdccffb6c1d5ca85811e1d162bdba822668ff05c 100644 GIT binary patch delta 611 zcmaFL(#bl(u-@6z#WAE}&f8gr`L_)OTJMV*t!O-@!nm+)N9-lNd7u9OcigSwJ$q>` zn`XllmJZ8~4UA<4nkzh41vTZY`c~T@-feT=);3VgpW(0p4-#6=@{=cO?YcLgt9ThK zyoK)Et6RG4B1414v>ki?d^!H{_3QKb$5cQ4vaFBD{yq6y&*SFuC0Ada^3n{PqRQ~# z`1gDkhWGY0TNoy2v#vGG%iDM1KG%%J4DV~$=C0=EW{Apu;&pJwGTStt%VPIsfA4>w z+8|)KYFE>gO}bmUuSo@Yg_N=?CJ9_zeLm*nxi>Mf5sFC?mmloglb!45vc7Mx>Hqj` za!wOW7o0wwR9_=BYc<2f_Xjk&X9(Y85)fRJVP3QQ?mOLu&cz$9X0Dswa6R_Hj6_B! zbpa_cg%YNP*qN4gVpZ`8lv!(yAqM3iXszXQa_DD{Frpe+5s)M)i&kws6Q$F=3 zqqBNXW>?R{fOU!NZ;W@GnqDu)ut-BHXR=1ut)HnMi}ULR*sK?1|FrwPx+b%=W8zZD zOFHszo|>G_ot7q`l-GKLeX(BSzG>S}O%HqO9UXo&C4KEWuA;)_T`y;-cy5o_xtZ@x z+*HPf=U=6cnKb9VNh*EJ@FMqMf8r$94@;HLO=1c1^3Y85Xk* zoQ9^8^_ogU17tLG(3sA=qH$OyX;c1vX85e6XeboFyt=akR{03~4;=Kufz delta 575 zcmeBVeabSyuwLHN#WAE}&f8h`#kUM3+U38#X+D_Z#rE$GtHc8DO)n{DFgm*R5xcg~GT75C@YO)^~XAi&~?KrO{iH%)f!{JCiL{P*wn zP5pc8ZO6$cpS!=$cF-(8T)!!E%Q>S(8cJPC40-wW`=@cvescD2=`>63cM=ht3=^JP z9@wnXYjM@=zi^}P;1@SdSYndt}L0dwrk zbp3|O*B?5s-=+8eaB;82g1q+Sn`=*P&Th6?aPnaL;+1S1O$)a99x_;BFOmIVebkcd zEbawUw5A`-{wCkI?AM~phN7vyXX}-G>J6^#&6{p>Ub1i5E=|FEPa2#%nb%A+KANzG zf9e(fjpvNQPR}%Yyi4rROSyz57O&s?o?mErnSHG4m#kjFCUyz;7=CqzkTw2uRBTjM z-`X7Z<>l+R?c5?sCWU{Fy;R!~b?(a3Q2*t(c>`{I*F7m+_x-B)T))a+PYiqK>M<^F zwwU>8=f*clb?eV;y_*-Fy~cp2agj*9?VLY1!+%6PtprBu`aev}|F%xwW@Gb%0SG)@ L{an^LB{Ts5K3N)H diff --git a/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/equipped-HAND.png b/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/equipped-HAND.png index 24ab188cab8fc523acfe43531b7cb2502f23c681..f45a0f03dca4805a172d4adf3e205e04371ebc70 100644 GIT binary patch delta 338 zcmV-Y0j>Vy0{Q}wF@H2kL_t(|obB4ZZi6rwh2fK`k{KXVke~yBCHLToYwwi%$Phmp%*?qEx_c!6000000Q@gEV-K^u@RF1mBS|_Oo<`S8(tiKw zCF%2Yk|e#pJO}rL@|&iXB)yk!!L#n|gO{Wz+D*#83mupkqklM#bu7zp#rk^j)Y|U) z8f~_u$@x*V>++p*!S$mbplNDVP2CkSNA*$7-gD`UCHc;|RccU{7ry-!e{#=O^8o+= z000000002|4YPaq{ib8T|DNTAzh)*Nls%L;R!_+7l0p(=lv>;M;lCTYx0XwJskPk@ z$6UbyiN1DbKr|X2fS5YSu*A^W$Ffvn%sR6GQ*EvPzO{M)008hCoB~xIbjO8c_ z@zBU312nlP1Q^SGC!q;~l2UM`Dj3tFC!)-@v0ibQK{(h?ac%3&uoupEr4ykzDMXX!bW#c$} z+x;YgxfI56nBB(!K(MyGVjPF0iBxJp;zJaEcw%@dr8HwK_t4N(DWxNDSdZ5H(x>iVixt5*G6eE`b4Q!YNXRVx4h002ovPDHLkV1i;D&Rzfj delta 421 zcmV;W0b2gm1HS{1B!3BTNLh0L01m_e01m_fl`9S#0004TNklF@P^4|hoqtivI8Zv+1a^gX0uC+@W++`GC&5%06zxs za9^M0Kfg3rzXITi@V+d|!LO%>B!7BPhImn24|84D zjvZSCKrq6aO*IIROc1sM+K$*HP8>dYyl-O$VD}nwgsC`&@XS`OHPO~hASM7-oXT0O z3O?8ZW(f0b-C#6JBcn=N|t+2FL&z;Jfw#C-rQPD4%i! P00000NkvXXu0mjfgu%J1 diff --git a/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/meta.json b/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/meta.json index 4c8d6ddca366..0ac22e70330b 100644 --- a/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/meta.json +++ b/Resources/Textures/SS220/Clothing/Hands/Gloves/combat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from Skyrat-tg at commit https://github.com/Skyrat-SS13/Skyrat-tg/commit/b9c06b16579dc828ac4d6f603995e083075725b2, modified by Estkemran (Github) for SS220", + "copyright": "Taken from Skyrat-tg at commit https://github.com/Skyrat-SS13/Skyrat-tg/commit/b9c06b16579dc828ac4d6f603995e083075725b2, modified by Estkemran (Github) for SS220, resprited by cream_bag (Discord) for SS220", "size": { "x": 32, "y": 32 From affc622513f40b4a839d0ae30a654d08faea7ade Mon Sep 17 00:00:00 2001 From: Maxon Date: Wed, 19 Feb 2025 19:46:36 +0000 Subject: [PATCH 12/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 7933ea10b1b3..e5a02242827e 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,19 +1,4 @@ Entries: -- author: UrPrice - changes: - - message: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0430 \u0432\u043E\u0437\u043C\ - \u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0441\u043F\u0430\u0432\u043D\u0430\ - \ \u0440\u0430\u0443\u043D\u0434\u0441\u0442\u0430\u0440\u0442\u043E\u043C \u0432\ - \ \u043A\u0440\u0438\u043E\u043A\u0430\u043F\u0441\u0443\u043B\u0430\u0445 (\u0442\ - \u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0437\u0434\u043D\u0435\u0435 \u043F\ - \u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435), \u0441\u043B\u0443\ - \u0447\u0430\u0439\u043D\u043E\u0433\u043E \u0441\u043F\u0430\u0432\u043D\u0430\ - \ \u0432 \u043F\u0435\u0440\u043C\u0435 \u0438\u043B\u0438 \u043D\u0430 \u0426\ - \u041A." - type: Tweak - id: 324 - time: '2024-07-25T16:27:32.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1457 - author: kirus59 changes: - message: "\u041B\u0435\u0442\u0430\u044E\u0449\u0438\u0435 \u043C\u043E\u0431\u044B\ @@ -6170,3 +6155,12 @@ id: 825 time: '2025-02-19T19:43:28.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2580 +- author: Cortez, cream_bag + changes: + - message: "\u0417\u0430\u043C\u0435\u043D\u0435\u043D\u044B \u0441\u043F\u0440\u0430\ + \u0439\u0442\u044B \u0431\u043E\u0435\u0432\u044B\u0445 \u043F\u0435\u0440\u0447\ + \u0430\u0442\u043E\u043A" + type: Tweak + id: 826 + time: '2025-02-19T19:45:32.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2591 From 0be4897cf0d3cc5e3f6c283e52d6d42dab5fdc6a Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Wed, 19 Feb 2025 23:09:56 +0300 Subject: [PATCH 13/46] Fix starting gear inharitance (#2593) * Fix starting gear inharitance * Fix comment --- Content.Shared/Roles/StartingGearPrototype.cs | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Roles/StartingGearPrototype.cs b/Content.Shared/Roles/StartingGearPrototype.cs index b0a4b94e550b..cc4d39f93ea5 100644 --- a/Content.Shared/Roles/StartingGearPrototype.cs +++ b/Content.Shared/Roles/StartingGearPrototype.cs @@ -19,10 +19,51 @@ public sealed partial class StartingGearPrototype : IPrototype, IInheritingProto [AbstractDataField] public bool Abstract { get; } + // SS220 fix inheritance begin + /// + //[DataField] + //[AlwaysPushInheritance] + //public Dictionary Equipment { get; set; } = new(); + /// [DataField] [AlwaysPushInheritance] - public Dictionary Equipment { get; set; } = new(); + public Dictionary Equipment + { + get + { + if (Parents != null) + { + var prototypeManager = IoCManager.Resolve(); + Dictionary newDict = new(); + + // Get values from parent + // Since parents are the same prototype this action is essentially recursive. + foreach (var parent in Parents) + { + var parentProto = prototypeManager.Index(parent); + foreach (var (pKey, pValue) in parentProto.Equipment) + { + newDict[pKey] = pValue; + } + } + + // Add value from this prototype + foreach (var (key, value) in _equipment) + { + newDict[key] = value; + } + + return newDict; + } + else + return _equipment; + } + set => _equipment = value; + } + + private Dictionary _equipment = new(); + // SS220 fix inheritance end /// [DataField] From a84de9ed7b713f62ecb3c1f5c90ea64ded3226f6 Mon Sep 17 00:00:00 2001 From: Maxon Date: Wed, 19 Feb 2025 20:11:01 +0000 Subject: [PATCH 14/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index e5a02242827e..45f57b1868fa 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,18 +1,4 @@ Entries: -- author: kirus59 - changes: - - message: "\u041B\u0435\u0442\u0430\u044E\u0449\u0438\u0435 \u043C\u043E\u0431\u044B\ - \ (\u043F\u043E\u043F\u0443\u0433\u0430\u0438, \u043A\u0430\u0440\u043F\u044B\ - , \u0434\u0440\u0430\u043A\u043E\u043D\u044B \u0438 \u0442.\u0434.) \u0431\u043E\ - \u043B\u044C\u0448\u0435 \u043D\u0435 \u0437\u0430\u043C\u0435\u0434\u043B\u044F\ - \u044E\u0442\u0441\u044F \u043E\u0442 \u043D\u0430\u043F\u043E\u043B\u044C\u043D\ - \u044B\u0445 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 (\u043B\u0443\u0436\ - , \u0432\u043E\u0434\u044B \u0438 \u043F\u0430\u0443\u0442\u0438\u043D\u044B\ - )" - type: Tweak - id: 325 - time: '2024-07-25T20:49:11.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1461 - author: Okroshka changes: - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u043E\u0437\u0440\u0430\ @@ -6164,3 +6150,14 @@ id: 826 time: '2025-02-19T19:45:32.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2591 +- author: Kirus59 + changes: + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u0442\ + \u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043D\u0435\u043A\u043E\u0442\ + \u043E\u0440\u043E\u0439 \u043E\u0434\u0435\u0436\u0434\u044B \u0443 \u0440\u043E\ + \u043B\u0435\u0439 \u042F\u041E \u043F\u0440\u0438 \u0441\u043F\u0430\u0432\u043D\ + \u0435" + type: Fix + id: 827 + time: '2025-02-19T20:09:56.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2593 From 3e42636515d4545641c2c8552c553a23b79e19d0 Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Thu, 20 Feb 2025 01:28:19 +0200 Subject: [PATCH 15/46] FIX: Visual state unlit for airlocks (#2588) * FIX: Visual state unlit for airlocks * fix commit * fix fix commit --- .../AirlockVisuals/AirlockVisualsComponent.cs | 12 ++++++++++++ .../AirlockVisuals/AirlockVisualsSystem.cs | 19 +++++++++++++++++++ .../Doors/Airlocks/base_structureairlocks.yml | 3 +++ .../Structures/Doors/Airlocks/highsec.yml | 3 +++ .../Doors/Windoors/base_structurewindoors.yml | 5 ++++- 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 Content.Server/SS220/AirlockVisuals/AirlockVisualsComponent.cs create mode 100644 Content.Server/SS220/AirlockVisuals/AirlockVisualsSystem.cs diff --git a/Content.Server/SS220/AirlockVisuals/AirlockVisualsComponent.cs b/Content.Server/SS220/AirlockVisuals/AirlockVisualsComponent.cs new file mode 100644 index 000000000000..1ffe754de31d --- /dev/null +++ b/Content.Server/SS220/AirlockVisuals/AirlockVisualsComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Server.SS220.AirlockVisuals; + +/// +/// This component used for our airlock visuals +/// +[RegisterComponent] +public sealed partial class AirlockVisualsComponent : Component +{ + +} diff --git a/Content.Server/SS220/AirlockVisuals/AirlockVisualsSystem.cs b/Content.Server/SS220/AirlockVisuals/AirlockVisualsSystem.cs new file mode 100644 index 000000000000..106d88bbb085 --- /dev/null +++ b/Content.Server/SS220/AirlockVisuals/AirlockVisualsSystem.cs @@ -0,0 +1,19 @@ +using Content.Shared.Doors.Components; +using Robust.Server.GameObjects; + +namespace Content.Server.SS220.AirlockVisuals; + +public sealed class AirlockVisualsSystem : EntitySystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnComponentInit); + } + + private void OnComponentInit(Entity ent, ref ComponentInit args) + { + _appearance.SetData(ent.Owner, DoorVisuals.ClosedLights, true); + } +} diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index 9e73471deff8..5b31bb86df39 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -129,6 +129,9 @@ type: WiresBoundUserInterface - type: Airtight noAirWhenFullyAirBlocked: false + #ss220 airlock visuals fix start + - type: AirlockVisuals + #ss220 airlock visuals fix end - type: RadiationBlocker resistance: 3 - type: Occluder diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml index df3a4e1999e2..5abb1cbc2d6a 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml @@ -72,6 +72,9 @@ time: 10 - type: Airlock openUnlitVisible: true # Corvax-Resprite-Airlocks + #ss220 airlock visuals fix start + - type: AirlockVisuals + #ss220 airlock visuals fix end - type: NavMapDoor - type: DoorBolt - type: AccessReader diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index cd7669987740..b5cee109ee16 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -131,6 +131,9 @@ openUnlitVisible: true # needed so that windoors will close regardless of whether there are people in it; it doesn't crush after all safety: false + #ss220 airlock visuals fix start + - type: AirlockVisuals + #ss220 airlock visuals fix end - type: NavMapDoor - type: DoorBolt - type: Electrified @@ -245,7 +248,7 @@ # This tag is used to nagivate the Airlock construction graph. It's needed because the construction graph is shared between Airlock, AirlockGlass, and HighSecDoor #ss220 windows dmg fix begin - Window - #ss220 windows dmg fix end + #ss220 windows dmg fix end #Plasma Windoors From 35e229eda8c610c5ff93ab0302ecd9dc7691304e Mon Sep 17 00:00:00 2001 From: Maxon Date: Wed, 19 Feb 2025 23:29:23 +0000 Subject: [PATCH 16/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 45f57b1868fa..a0d6b803e71b 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,13 +1,4 @@ Entries: -- author: Okroshka - changes: - - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u043E\u0437\u0440\u0430\ - \u0447\u043D\u044B\u0435 \u043E\u0447\u043A\u0438 \u0441\u0442\u0430\u043B\u0438\ - \ \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u044B\u043C\u0438!" - type: Tweak - id: 327 - time: '2024-07-28T23:08:45.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1463 - author: MiraHell changes: - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u0434\u0435\u0439\ @@ -6161,3 +6152,12 @@ id: 827 time: '2025-02-19T20:09:56.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2593 +- author: ReeZii + changes: + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u0442\ + \u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0437\u0430\u043A\u0440\ + \u044B\u0442\u043E\u0433\u043E \u0448\u043B\u044E\u0437\u0430." + type: Fix + id: 828 + time: '2025-02-19T23:28:19.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2588 From 794db01a967acc8de51ab18ead04993411f92a34 Mon Sep 17 00:00:00 2001 From: UrPrice Date: Thu, 20 Feb 2025 07:43:42 +0300 Subject: [PATCH 17/46] refactor approve labeler (maybe) --- .github/workflows/labeler-approve.yml | 43 ++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 41605851bdd0..c87fb59c77dd 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -6,15 +6,42 @@ on: jobs: remove_label: - if: github.event.review.state == 'approved' runs-on: ubuntu-latest + if: github.event.review.state == 'approved' permissions: - actions: write pull-requests: write - contents: write steps: - - uses: actions-ecosystem/action-remove-labels@v1 - with: - labels: | - Status: Needs Review - Status: Awaiting Changes + - name: check all revs + id: check_approvals + uses: actions/github-script@v7 + with: + script: | + const { data: reviews } = await github.rest.pulls.listReviews({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.pull_request.number, + }); + + const requiredApprovals = context.payload.pull_request.requested_reviewers.length; + const approvedReviews = reviews.filter(review => review.state === 'APPROVED').length; + + return approvedReviews >= requiredApprovals; + + - name: rm labels + if: steps.check_approvals.outputs.result == 'true' + uses: actions/github-script@v7 + with: + script: | + const labelsToRemove = ['Status: Needs Review', 'Status: Awaiting Changes']; + const currentLabels = context.payload.pull_request.labels.map(label => label.name); + + for (const label of labelsToRemove) { + if (currentLabels.includes(label)) { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + name: label, + }); + } + } From a62d4850591fef13c8da252a1db1cac81d22bc0a Mon Sep 17 00:00:00 2001 From: UrPrice Date: Thu, 20 Feb 2025 08:15:55 +0300 Subject: [PATCH 18/46] extPermissions for approve labeler --- .github/workflows/labeler-approve.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index c87fb59c77dd..3a39f5543e36 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -10,6 +10,9 @@ jobs: if: github.event.review.state == 'approved' permissions: pull-requests: write + issues: write + contents: write + actions: write steps: - name: check all revs id: check_approvals @@ -30,6 +33,7 @@ jobs: - name: rm labels if: steps.check_approvals.outputs.result == 'true' uses: actions/github-script@v7 + repoToken: "${{ secrets.GITHUB_TOKEN }}" with: script: | const labelsToRemove = ['Status: Needs Review', 'Status: Awaiting Changes']; From 7f93ac99d59b6c376f90c3f9fc82daad44f8256d Mon Sep 17 00:00:00 2001 From: UrPrice Date: Thu, 20 Feb 2025 08:35:18 +0300 Subject: [PATCH 19/46] misstaking repotoken for approver --- .github/workflows/labeler-approve.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 3a39f5543e36..25c661632856 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -33,7 +33,6 @@ jobs: - name: rm labels if: steps.check_approvals.outputs.result == 'true' uses: actions/github-script@v7 - repoToken: "${{ secrets.GITHUB_TOKEN }}" with: script: | const labelsToRemove = ['Status: Needs Review', 'Status: Awaiting Changes']; From 812228c304143ef8d7bacca4e7526b5804947fc8 Mon Sep 17 00:00:00 2001 From: Tris0r <163807362+Tris0r@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:29:17 +0500 Subject: [PATCH 20/46] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B4=D0=B5=D0=B6=D0=B4=D1=8B?= =?UTF-8?q?=20"=D0=90=D0=BB=D1=8B=D0=B9=20=D0=A2=D0=B0=D0=B9=D1=84=D1=83?= =?UTF-8?q?=D0=BD"=20=D0=B7=D0=B0=20=D0=B2=D0=B7=D0=BB=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=B6=D0=B4=D0=BE=D0=BC=D0=B0=D1=82=D0=B0=20?= =?UTF-8?q?(#2592)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Буренка, я как и ты был на цепи * Мур мур мяу~~ --- .../ss220/clothing/Outerclothing/misc.ftl | 3 ++ .../Inventories/clothesmate.yml | 2 ++ .../Entities/Clothing/OuterClothing/misc.yml | 12 +++++++ .../equipped-OUTERCLOTHING-vox.png | Bin 0 -> 1836 bytes .../equipped-OUTERCLOTHING.png | Bin 0 -> 5165 bytes .../Misc/scarlet_typhoon.rsi/icon.png | Bin 0 -> 969 bytes .../Misc/scarlet_typhoon.rsi/inhand-left.png | Bin 0 -> 4373 bytes .../Misc/scarlet_typhoon.rsi/inhand-right.png | Bin 0 -> 4387 bytes .../Misc/scarlet_typhoon.rsi/meta.json | 30 ++++++++++++++++++ 9 files changed, 47 insertions(+) create mode 100644 Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/equipped-OUTERCLOTHING-vox.png create mode 100644 Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/icon.png create mode 100644 Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/inhand-left.png create mode 100644 Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/inhand-right.png create mode 100644 Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/meta.json diff --git a/Resources/Locale/ru-RU/ss220/clothing/Outerclothing/misc.ftl b/Resources/Locale/ru-RU/ss220/clothing/Outerclothing/misc.ftl index f68067ff4ce4..43531c8aa8c7 100644 --- a/Resources/Locale/ru-RU/ss220/clothing/Outerclothing/misc.ftl +++ b/Resources/Locale/ru-RU/ss220/clothing/Outerclothing/misc.ftl @@ -9,5 +9,8 @@ ent-ClothingOuterHoodieChaplainWhite = белое одеяние священн ent-ClothingOuterApronBard = накидка барда .desc = Подчеркивает стиль владельца. .suffix = За время в игре +ent-ClothingOuterScarletTyphoon = алый тайфун + .desc = Знаете, мне как-то неловко представляться, но если вы настаиваете, то я мирный охотник в погоне за миражом по имени любовь. + .suffix = За взлом одеждомата clothing-outer-radio-handheld = Рация diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml index b68c5cf74ccd..25a3f107cf3e 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml @@ -100,3 +100,5 @@ ToyFigurinePassenger: 1 ToyFigurineGreytider: 1 # DO NOT ADD MORE, USE UNIFORM DYING + emaggedInventory: # SS220 Scarlet Typhoon add for emag + ClothingOuterScarletTyphoon: 1 # SS220 Scarlet Typhoon add for emag diff --git a/Resources/Prototypes/SS220/Entities/Clothing/OuterClothing/misc.yml b/Resources/Prototypes/SS220/Entities/Clothing/OuterClothing/misc.yml index 6c19f8349e40..e049a7986ae8 100644 --- a/Resources/Prototypes/SS220/Entities/Clothing/OuterClothing/misc.yml +++ b/Resources/Prototypes/SS220/Entities/Clothing/OuterClothing/misc.yml @@ -67,3 +67,15 @@ sprite: SS220/Clothing/OuterClothing/Misc/chef_nt.rsi - type: Clothing sprite: SS220/Clothing/OuterClothing/Misc/chef_nt.rsi + +- type: entity + parent: ClothingOuterStorageBase + id: ClothingOuterScarletTyphoon + name: the scarlet typhoon + description: You know, it's kind of awkward for me to introduce myself, but if you insist, then I'm a peaceful hunter chasing a mirage named love. + suffix: For emagg clothing vendomat + components: + - type: Sprite + sprite: SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi + - type: Clothing + sprite: SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi diff --git a/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..554045ff745bb660be7edd230f4e15d83334aa9d GIT binary patch literal 1836 zcmV+{2h;e8P)EX>4Tx04R}tkv&MmKpe$iQ>8^KA{G&G$WWc^q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4RL3r>nIQsV!TLW@`rj{EWM-sA2aAk@oDv$|q{rrTyJ z5f?MrRWa}i0YUU)2m>;+j5$e4qT~3whmWs!QJ&TL+@GUQ%~=faiNrBxm^SeS@yw=e zaNZ{lv!bjLpA%1*bV1@rt}7nDaW1$l@XWB8PR$dCiN!)2D{ah*rbawX98oo$@`a4Y zD(5ZETDi)a_v9}O<@A+huG1Vv0*hFJ1Q80VD4`4+QCf9UETm{Z-oZcO`XzEH(v&^mat9cGGGtSBB|l9ep9kL0=$o>@;4RRz=JnRx$LRx*rmm7Vz`-Ff zUZCvt4(|@O_xA6ZW`9367IKbJrRJvq000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rk0tgHa3qqil2LJ#C5J^NqRCt{2T1~FvI1v8q3^~Uj z$U)eESid{G#fV)?eTZ43UT}xEMr6Z52!eA2xoQ?pB~D%d8d(g$`IK%}1thlHG4ToTWkRif zL&JS<#)P%=$(VZk`M^tK3#IuoAxv)?852&*>g~v+WJct<^c!+D2>oSg{|kK=qJ%s} z5dA-VI<1*7GXON6eu4bq)|@Oqkzkn*%`Qe`^C&0#}4@gW7JCz^;df znd6bRq_If|nW5eT(ldCE_ypM1yc~Tm6Kc&w_n15s7D{u*RJ&tY_8C*{elw=vRp70F zlhU>DMOqB4-Ecn0`UhI!d!n&h`5Io%iauNin7QV0Fkx79xZ!}>8ueHjAU*Udju@L#3%&#v|D>-#R;3m1U;>>&z}Gl{f? z&<{EXxc}v5Cg1n^4T+P|-ws}K29UN;c#Q}ZYG@_M`;JWN(H3<3`M&!ti{*Ra7y_

Bxa~`SXH|vBy}E%hAl@cpTM~0Ep^i*So`oF7ythD|rR`W*5xiA5Fp?Lz zObFYX%>egVdpW1f4cIp`?Y#ni0(A`lU=<>5GpA@_Y%d@M5pKbx@FIMKq~*Q2l?sgy z1ND_OIeS<5-?0s3`MXM(CH9W;VW2{*M7%X6_W*G<-9qVq<2KkW+7>=WDU<}-N)Y5J z&}C}OctBU#?&T;{c;H1hC=5uMN>LHc(+7hFLY_AC>Jk};r%(hPgm!=uHz?QMQ?(7G zN^`2lsS*=hOQ<{ri?O|yr1BIjo+o7XBO)U3522_gs)EyCR{#J24rN$LW=%~1DgXcg a2mk;800000(o>TF0000P`Q3AV z=iD>dY!-zrvd6pQ0RXTM76eA3Pe1d=)&~7Pj3joT4|g~^SSl0(pQ2-10E77mz@j4z zdRs2%+N68vG#v>D5CsPW5L9ZV6iI*qKyOOT;tS6DO>0=W_yBPdE<@mSQMCKdeZ*~F zt|vy>o?LKbqG#S}|LhI38X6*0B=+F(=ph@|T@6%{tIIujZjsXLpQA_I%F^ zO@E0Y1B1!Z=eivfR{8U)k*TJE%^pW*9jU)p-{l#zV=$|GOQX`1LAK*D#L}yM^-kjB zzt)A|%6FDHg*!Dy35&m(*?qjpkWs#*|bGx&KR5-tzxiPDrm`m_qx7NMsQ0+p~ zlHD$L$j$Js6GV`D0z4OBm2j+15wHuS-sowkOtX z|G3y-WxXeDZgtNwmN7s4YPXz}Y~8QKy0*%NH?U-#v1m>J3to!9>Vp5Eb2zic3pb(7 zsycp!vNY8+A8>o{X%cqYG%F~mX~lp+7cNtd6e3Rtu&ajDhwu1y`Jl=XXkjQ9 zQp(AoL@9>Jdb!GyFrKeo1w!$#mLP^@h=Nb-{qZ!BfJpenrQSlSP!#~jA%YY&yf`H+ z3QCEGI1-}od^}IjMFHfn79{B92?`BY&nH@Nx#-v|rVt4h6>U797%dbL0+ec)z$7!t zR8o*0Nv0F$;|V;qM9Pf}TsQ`S&iKSQtyaaQP;@#SS;rtN)iMf=!{Jb zKF~O*V1-5tDj?Vlg@Th26o(}SX;O}uL1MA!-XtbOW0S;Gsf5Ikf(#!v1Ehmga2!Oq z8bPZPOc?K#8A^geNg%ejgu(G4iP>yAiRmq6kw6G_4hETGHq4}gub?ClccD@(2hnsQ za!>|SR0^484>RFhe^D@>NGDU@NJI&sR*D+%iJ^!hN&jXc3X#K$wV;_znh%4`@nO;F zEGC`d!{WSAS^}#zXeF94X;d=>7(aX!Jxah7(6;qtgV$a+C-J%c0zx>QC*}9m^`5SGV&I*W-&fcFjV}C~ z*C|+m{tD8eFH6g2*KbB&wQR(nFA4-k%=g~v;%rp%p-Qk!0|0i;<_`uaFik;)IBl>n z2zTGg7U0+%m{9%z0Ibu31O21)rk(=-ZTq>78`kV{ZFc%rwIhKm=IhSy%V`&+Zp!T- zH~rpT)EY71iJMv4&+)75IOF1Fi%`=p3VM`S>odx{3#{Zxosadr>DwFo0wPjpd}HT# z8hyrZ>*A{WPgn6PBMX`t>BSQSIW~JJ7!&Z#I=^q@>m`T#Jo2w()(%CK zVE~%jXAQ&738w(#p6(+f;kOs?;94$_yS{E_t6pwJOgHeP5M&ImV$1_*%xC zoYo_o1I&X)&JC+%+Fuqt>Cj=9%vchVeJytWg{I+&4_ZsUztiTnHLtL1xzaT!htqP@ zZsDo2-Je(7jFml{I$>#u^XZMhVN^3#6s~H1fGx_97UQTdBd5cLYxgv)`mD??KNZf= zwl9t89BGt%opW=eYx<&7Wo~DG>8!RVY@RwPeg*bA-yy`|q0QU__xEb=+?^0!zFhuw zfj1C2jP|I=2#6 zG507oepAs<*ht*!wBSm|#b<_iSFz73Z8vn!bBq1>t9rxbc`cz|Y)ZQDlIIz@QoVh3 z@4uhm9e?B-Z?bo6x&6b<*ewmBU8@gklO!L}t50J9oP!<{6>1X`8%tt6ibGn@?VXuH*xuMRR%PXGC-nc?a>aqt z+;wu*#>Uyp<*mQ1M#-u1|=>%2V0`OZ+;uWh2-%CL)8ZP;1OLeH24tmD1MKbg|JvYy-0@{c^JtZCu+ z`bp(Y3HGhi+KbLt{Z`64S)%;#R?t^!YZLy(bdt=MDnSoSfSTOS?R*H(rZWY3PYqn?ypbnZ0m;l*`u+u3WF(6?uA zVD(P3oLxo&qlW|w{gJhgj8QSqJcoWyFoq0L{F`6Q_pR+pyu0R6esc3{8$SA15T Lg$0%^h+X?10Z+I` literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/icon.png b/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0a39edf093ed9e11ccc51ba94e6dc7a9850813 GIT binary patch literal 969 zcmV;)12+7LP)EX>4Tx04R}tkv&MmKpe$iQ>8^KA{G&G$WWc^q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4RL3r>nIQsV!TLW@`rj{EWM-sA2aAk@oDv$|q{rrTyJ z5f?MrRWa}i0YUU)2m>;+j5$e4qT~3whmWs!QJ&TL+@GUQ%~=faiNrBxm^SeS@yw=e zaNZ{lv!bjLpA%1*bV1@rt}7nDaW1$l@XWB8PR$dCiN!)2D{ah*rbawX98oo$@`a4Y zD(5ZETDi)a_v9}O<@A+huG1Vv0*hFJ1Q80VD4`4+QCf9UETm{Z-oZcO`XzEH(v&^mat9cGGGtSBB|l9ep9kL0=$o>@;4RRz=JnRx$LRx*rmm7Vz`-Ff zUZCvt4(|@O_xA6ZW`9367IKbJrRJvq000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rk0tgNt5$~Uv0{{R4tw}^dR9J=Wl`(SLFc3u_fJo=C zM&v=*}72w6L1hakRz^7BVS`FDkSwl z?ZqG=nKmK7vAg(mm$w|m^5g{M&sgWGA>)IAyER^4t}{Tbmgcq1%bBIXYl|tpP{r3lu$2oc`>uIZf6J7A*J(-T(#2#OPb< rudo0B01jnXNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjf@@=|Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/inhand-left.png b/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..784879f0b3cfc9af9757de66be4d99397aaaea3e GIT binary patch literal 4373 zcmeHKe^35My(}jQ-75TZ4*lDVatvcI|B(fQ_~ZHJJ^%Bth{W$x5v zbq+kcqB?hG%{RAhwtspv0lDR??vYbF(;Jt} zKUu6hzO?u3;TJN`&ECGFdBwaXzOy?URwldS*O^}W;^}8TNb1JUZ+!d17r*SnqyBmO zm!R>_@y;pLxm%~s(!TM?fv9=wHkM>9Jy>9GKW*>)dZDzqD{0GaHtYulyMAQ53YspYG{1ca_aPh#1s2(+==dq zKKA9mdS2k4vYTV2nzx>OrxhkMB;@4Ex$ZSI8}R8EF5m^akWW+-mTV7+3|k0f#0&BT zzYXnq=Ol^?h$x@aEJxS2OeTXoYWDx&xeoo2+Gb<2r?AVw|WF~%0+-@fncCSVu7<1_~iv- zAvku#Uo4S|)a7t24vK&eng-#lQ*>8W)?QQI|6| z5a>RFJI;D|?W!@fa=U3qfGttNb2)6NGC$1)Sb?L}uE9cB4JOKpk-W)@8TDo}W~B@i zM)4NbYc-n|fj>-nbgQLM=k)UoR1W`8y&9H+@2r{K$kYR{5sA3Bke?EYx$56Qr%Y|<#1q(|U z3|_*EktP5Oz``3aD{qAL!0<+nH(Dt#X;fJlK@SFaxr~uOYChx6#D&6EdExu1UHk#K44%C#&oKMwfQT(~rzvJ4S{u4jHce~ZTJn`d% zlYf|3dd6JQbw$xci<-lSs@`w;OW{)QhW^@j7uP&+Olps-&YcpPDvI-eT;151wd4kN zz9Mm1APPi8#Z?!C_ja_DU(CJU+CArZUGtH?#!cb5iCH}}^HUP@_MUwLbZ_3iu{rwi zw$=Ug<2`sN0y-X@_PqV_KuP=DO<|h4=tb*mkMuc4+Chi&+|0vd_pGY})BIbgS`Qbt zr!UeOTSeJDw|f@7e>Y|KvOLeFyPA20mHV$Ikyj#i`oo~~Pt!C;JMycF@W-DYc&qZ| SsgEf)W0y12(YPXS>wf?ttS#FB literal 0 HcmV?d00001 diff --git a/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/inhand-right.png b/Resources/Textures/SS220/Clothing/OuterClothing/Misc/scarlet_typhoon.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..74ee8aca00f2167bf99d60d46d7b2485773ea69e GIT binary patch literal 4387 zcmeHKe^3eL-I@)*iSipd9{$z~MIG=n4dmH)yImCr z`=KhedWtF-_SEoETGYwnt8iE;q@-loQc@7F=;4Jzpi=p3U)*X=|0pr~%*vd1QWv08 zCl`I3we!Yabo2XRsRtrgzx?csC7OpDo}OgeRJAXV@9kj^Uk`L1I#_uS30+rlEIebA zCcCru_2jC&Uu=GG>t@H-H)kNNpDt-S?x?8yl8>AG1og!-ZBLjw>9!*@m~48@WLv!V z>mQE4vZb+f>8{W3weQ}Sd13j)o{guq{5Hd_@wd*`xx5{*5lwp!P1zllxlKyyOlw#$ z^F)#6*fTxn|5%f8A?lTlXOgEcaGl>&wUCT+wXSa6Ti9r zThQ=XbZSsl-iF5}ht~~r^PFXtd&lTr)#l5tZRX^^m{*~p2S^v4& z_DQC_-1fHd^21K!EH-h~6VBG?s}KHKG%dEG_o-u7RyptbC^uOkeesv*_Y6)$E9I7j{|7@F0YcX1dHFxuxo&XI6#5m zHly7ioG>(^+ zmTF2VjYllNwI-7ZCrF$mF=&DL%G?s;$K1ZzGDIJS75G?D@JfQmjmVgc!&5AoQ55Qt zf%sfryL}Me?dxX&@`3vqFRs-PxXXnP_wY%nB@m=Ppr7>c<(7E?o(+7SVvz-@CBQAs z9uC2=gZ|!Pu~1nK$Ks$6xS**I&Z-?TWtz>NHRvHzP$0OxiWek%gry|#Lu8GJP1Y#O z86F69AH*GDJ+OAg7+TrwwAI5F%i-CqW>lV^<~*#x(Ms1~U`UoS8Zc5%YB8OjHDC@F z_JB@jU`!^Ub?CIiploiR#JE`?LqTwj0C9NIL^$G&9HuAqI!wpwd5mEh79)U(Gq8-# zzyfL*M5ZXfs$>d>M zE(WGka4`h{_qq!dg-ke|lw~ucq=p!hWECUA5!EBE|4QJGMn0X%0!Tq zPD|;j_;{mk$mm%h`d}r>m|8+Z85E7278))F63fVS3IP;3Tnn8d0!H$PxgJlU8I?mq zWY0mh9d0L%kr*o@0SHQvdYT|34GcAvX(awlF*m(bioJb zFH=N)J1Peh^^N+5g@Uq`5JcG&G{g2S!N-&UPKgs@^{H4V<1PU3^yn|w0lDxKrC_2s zj$?Q&#_IsUbS9p{jC$6HX~}p($7(r~k#&qj_j!1!lo3Hv0pt;K1L(2EUobA883QX$z<}me}8&ERAo4(wqQiVs!uUfUe_DLuVk!<$Vkne&*BZ6aa?Va!8 zWxCX6P0IDx{_Aheu8)Ywae=fcm!rv5llCs&aX{P|^Zazpk;?0D&OAM#+T{4nTgiLY zBT4(Yr_sv0`VB&)f8nk69u+#!f+{X1etW19TiuZ_%&+>#*{Rh>Dq0uEE_>{)qi2XF zym97=cA@G*swKCPsy?gQQFS)sOXIoOMP<_~llYY#e+gQ<_N!eD$3qUzYHO)){@sJ; zLk>22%yYV(>K9bwR4qXV_BXocPHpLo@3eH+{CV~DPxFO8oOXlClF}ZoYN9Z_L z|6WDyvad34-n;%qQ{CLM*cGe(d9QXm?1ZZV_gl6)E^Rr7;gbj2(&OTer(TUaTJus? z$FJ3~^7quZk6k>H>s3QdsQ$tIc}Hv1y8}^yE&~<0%uNNy@Fxzp^W)d@M-$;_VN Date: Thu, 20 Feb 2025 09:30:22 +0000 Subject: [PATCH 21/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index a0d6b803e71b..ca48de0e41a2 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,13 +1,4 @@ Entries: -- author: MiraHell - changes: - - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u0434\u0435\u0439\ - \u0441\u0442\u0432\u0438\u0435 \u0434\u043B\u044F \u0443\u0445\u043E\u0434\u0430\ - \ \u0432 \u043A\u0440\u0438\u043E" - type: Add - id: 328 - time: '2024-07-28T23:11:02.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1464 - author: ReeZii changes: - message: "\u0420\u0418\u0422\u042D\u0413 \u0442\u0435\u043F\u0435\u0440\u044C\ @@ -6161,3 +6152,13 @@ id: 828 time: '2025-02-19T23:28:19.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2588 +- author: Cortez, matriotic + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u0434\u0435\ + \u0436\u0434\u0430 \"\u0410\u043B\u044B\u0439 \u0442\u0430\u0439\u0444\u0443\ + \u043D\" \u0437\u0430 \u0432\u0437\u043B\u043E\u043C \u043E\u0434\u0435\u0436\ + \u0434\u043E\u043C\u0430\u0442\u0430" + type: Add + id: 829 + time: '2025-02-20T09:29:18.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2592 From b9095dc96cf41fbbf2bd574c5bab0352ad76c870 Mon Sep 17 00:00:00 2001 From: UrPrice Date: Thu, 20 Feb 2025 15:04:10 +0300 Subject: [PATCH 22/46] labelerToken add for approver --- .github/workflows/labeler-approve.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 25c661632856..8420328c2583 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -34,6 +34,7 @@ jobs: if: steps.check_approvals.outputs.result == 'true' uses: actions/github-script@v7 with: + github-token: ${{ secrets.LABELER_TOKEN}} script: | const labelsToRemove = ['Status: Needs Review', 'Status: Awaiting Changes']; const currentLabels = context.payload.pull_request.labels.map(label => label.name); From 3591ac3b808a75de9af7da82a0cfe32bce1dfafa Mon Sep 17 00:00:00 2001 From: UrPrice Date: Thu, 20 Feb 2025 16:25:31 +0300 Subject: [PATCH 23/46] revert github-token approver req --- .github/workflows/labeler-approve.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 8420328c2583..25c661632856 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -34,7 +34,6 @@ jobs: if: steps.check_approvals.outputs.result == 'true' uses: actions/github-script@v7 with: - github-token: ${{ secrets.LABELER_TOKEN}} script: | const labelsToRemove = ['Status: Needs Review', 'Status: Awaiting Changes']; const currentLabels = context.payload.pull_request.labels.map(label => label.name); From 901adab2fc016c0931a43759c7ed76bec903af94 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Thu, 20 Feb 2025 17:59:45 +0300 Subject: [PATCH 24/46] Try fix with actions/checkout --- .github/workflows/labeler-approve.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 25c661632856..3e59e4984f2d 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -14,6 +14,7 @@ jobs: contents: write actions: write steps: + - uses: actions/checkout@v4 - name: check all revs id: check_approvals uses: actions/github-script@v7 From 21bbea14030fd3b2a7da22830f3c87eb535e1dd3 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:04:08 +0300 Subject: [PATCH 25/46] add all permissions for labeler --- .github/workflows/labeler-approve.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 3e59e4984f2d..2d3f8c452ec3 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -8,11 +8,7 @@ jobs: remove_label: runs-on: ubuntu-latest if: github.event.review.state == 'approved' - permissions: - pull-requests: write - issues: write - contents: write - actions: write + permissions: write-all steps: - uses: actions/checkout@v4 - name: check all revs From bc9405f4e92c8141f376e0f970838e5ff6a2d867 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Thu, 20 Feb 2025 18:19:31 +0300 Subject: [PATCH 26/46] try add env --- .github/workflows/labeler-approve.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 2d3f8c452ec3..8bc0d37b5f95 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -45,3 +45,5 @@ jobs: }); } } + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 8e1e88debfd5c652683ccc5d2362c623c856abdd Mon Sep 17 00:00:00 2001 From: Burenov <57064948+Burenov@users.noreply.github.com> Date: Thu, 20 Feb 2025 21:33:10 +0500 Subject: [PATCH 27/46] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B4=D1=80=D0=B0=D0=B6=D0=B8=D1=82=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BA=D0=BB=D0=BE=D1=83=D0=BD?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=B3=D0=B0=20(#2594)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Я люблю Кэт * Убийства, кровь, демоны, ******** * Убрал * убрал убранное * Готово, пж мёрж * УЭ --- .../ghost/roles/ghost-role-component.ftl | 5 ++- .../Locale/ru-RU/ss220/paper/paper-misc.ftl | 33 ++++++++-------- .../Objects/Consumable/Food/Baked/bread.yml | 5 +++ .../Entities/Objects/Fun/bike_horn.yml | 3 ++ .../Construction/Graphs/machines/cyborg.yml | 9 +++-- .../SS220/Catalog/Fills/Lockers/service.yml | 4 ++ .../Mobs/Cyborgs/borg_chassis_clown_mime.yml | 6 ++- .../SS220/Entities/Mobs/Player/silicon.yml | 38 +++++++++++-------- .../Specific/Robotics/borg_modules.yml | 10 ++++- .../Objects/Weapons/Guns/pneumatic_cannon.yml | 2 +- Resources/Prototypes/SS220/tags.yml | 12 ++++++ 11 files changed, 88 insertions(+), 39 deletions(-) diff --git a/Resources/Locale/ru-RU/ss220/ghost/roles/ghost-role-component.ftl b/Resources/Locale/ru-RU/ss220/ghost/roles/ghost-role-component.ftl index c0aef56d3aef..f35f8d4b6805 100644 --- a/Resources/Locale/ru-RU/ss220/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/ru-RU/ss220/ghost/roles/ghost-role-component.ftl @@ -22,4 +22,7 @@ ghost-role-information-traveling-chef-rules = Действуют обычные ghost-role-information-giant-fly-name = Веспия ghost-role-information-giant-fly-description = Вы гигантская боевая оса. Ваша задача - уничтожить всех кроме представителей вашего вида. -ghost-role-information-giant-fly-rules = Вы [color=red][bold]Командный антагонист[/bold][/color], в команде с другими гигантскими осами. \ No newline at end of file +ghost-role-information-giant-fly-rules = Вы [color=red][bold]Командный антагонист[/bold][/color], в команде с другими гигантскими осами. + +ghost-role-information-clownmime-cyborg-name = МимоКлоунский киборг +ghost-role-information-clownmime-cyborg-description = Вы киборг, созданный с помощью магии хонка и минуты молчания(аминь), помогите своему создателю нести хонк по станции. diff --git a/Resources/Locale/ru-RU/ss220/paper/paper-misc.ftl b/Resources/Locale/ru-RU/ss220/paper/paper-misc.ftl index 52ed3f2dd497..eebf5cdcb7f1 100644 --- a/Resources/Locale/ru-RU/ss220/paper/paper-misc.ftl +++ b/Resources/Locale/ru-RU/ss220/paper/paper-misc.ftl @@ -1,23 +1,24 @@ book-text-clownmime-scribbles = [color=red]Дорогие дети![/color] [color=green]Клоун[/color] и Мим! - + Сегодня я открою вам тайну создания уникального помощника, сочетающего в себе лучшие качества человека и машины. Это будет наш маленький секрет, который останется между нами. - - {"["}bold{"]"}{"["}color=#800080{"]"}Материалы:[/color][/bold] - + + {"["}bold{"]"}{"["}color=#800080{"]"}Материалы:[/color][/bold] + 1. Киборг (любой вид) 2. Ткань — 20 штук 3. [color=green]Клоунский диктофон[/color] 4. [color=#000000]Францу[/color][bold][color=#808080]зский[/color][/bold] [color=red]багет[/color] 5. [color=red]8 р[/color][color=red]а[/color][color=orange]з[/color][color=#800080]н[/color][color=green]о[/color][color=#800000]ц[/color][color=blue]в[/color][color=purple]е[/color][color=red]т[/color][color=orange]н[/color][color=#800080]ы[/color][color=green]х[/color] мелков 6. [color=red]Маска и туфли [/color][color=green]клоуна[/color], а также маска мима - + 7. [color=#FFD700]Бананиумовый клаксон[/color] + {"["}bold{"]"}{"["}color=orange{"]"}Подготовка:[/color][/bold] - + 1. Найдите тихое место, где вас никто не будет беспокоить. 2. [color=green]Соберите все необходимые материалы и инструменты.[/color] - + {"["}bold{"]"}{"["}color=red{"]"}Создание киборга:[/color][/bold] - + {"["}bold{"]"}1. [color=red]Разблокировка киборга:[/color][/bold] Найдите того, кто поможет вам разблокировать киборга, или попросите его сделать это самостоятельно. {"["}bold{"]"}2. [color=orange]Извлечение компонентов: [/color][/bold] @@ -30,14 +31,16 @@ book-text-clownmime-scribbles = [color=red]Дорогие дети![/color] [ Используйте мелки, чтобы украсить киборга. Дайте волю своей фантазии! {"["}bold{"]"}6. [color=blue]Финальные штрихи: [/color][/bold] Наденьте на киборга маски и туфли, чтобы завершить его преображение. - {"["}bold{"]"}7. [color=purple]Возвращение компонентов:[/color][/bold] + {"["}bold{"]"}7. [color=#FFD700]Щепотка магии: [/color][/bold] + Прикоснитесь бананиумовым клаксоном к боргу, и наблюдайте за магией! + {"["}bold{"]"}8. [color=purple]Возвращение компонентов:[/color][/bold] Вставьте обратно мозг и батарейку. Закройте техническую панель и заблокируйте киборга. - + {"["}bold{"]"}Завершение:[/bold] - + Когда ваш киборг будет готов, он станет вашим верным помощником. Он будет слушаться только вас и помогать в решении различных задач. - + Помните, создание киборга — это увлекательное, но сложное занятие, требующее знаний и аккуратности. Будьте внимательны на каждом этапе! - - {"["}bold{"]"}{"["}color=#800000{"]"}С любовью,[/color][/bold] - {"["}bold{"]"}{"["}color=red{"]"}Хонко[/color][color=green]мама[/bold][/color] и [bold][color=#808080]хранительница[/color][/bold] тишины! \ No newline at end of file + + {"["}bold{"]"}{"["}color=#800000{"]"}С любовью,[/color][/bold] + {"["}bold{"]"}{"["}color=red{"]"}Хонко[/color][color=green]мама[/bold][/color] и [bold][color=#808080]хранительница[/color][/bold] тишины! diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 39029561f410..2bce729d492e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -685,6 +685,11 @@ Quantity: 1 - ReagentId: Blackpepper Quantity: 1 +#SS220 tag start + - type: Tag + tags: + - Baguette +#SS220 tag start - type: Clothing slots: [ BELT ] equippedPrefix: baguette diff --git a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml index 7c69aa090137..2df0ef0b6379 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml @@ -141,3 +141,6 @@ - type: Construction graph: BananiumHorn node: bananiumHorn + - type: Tag #SS220 tag + tags: + - BananiumHorn diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/machines/cyborg.yml b/Resources/Prototypes/Recipes/Construction/Graphs/machines/cyborg.yml index 343ed199c656..3c6a4470aa12 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/machines/cyborg.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/machines/cyborg.yml @@ -35,7 +35,7 @@ #SS220 ClownMimecyborg start - node: cyborg entity: BorgChassisSelectable - edges: + edges: - to: clownmimecyborg conditions: - !type:ContainerEmpty @@ -50,7 +50,7 @@ sprite: Objects/Fun/clownrecorder.rsi state: icon doAfter: 2 - - tag: Bread + - tag: Baguette name: Baguette doAfter: 2 - tag: Crayon @@ -86,6 +86,9 @@ - tag: ClothingMaskMime name: MimeMask doAfter: 2 + - tag: BananiumHorn + name: BananiumHorn + doAfter: 2 #SS220 ClownMimecyborg end - node: derelictcyborg @@ -94,4 +97,4 @@ #SS220 ClownMimecyborg start - node: clownmimecyborg entity: BorgChassisClownMime -#SS220 ClownMimecyborg end \ No newline at end of file +#SS220 ClownMimecyborg end diff --git a/Resources/Prototypes/SS220/Catalog/Fills/Lockers/service.yml b/Resources/Prototypes/SS220/Catalog/Fills/Lockers/service.yml index e778b83c51ad..b010f489d2f9 100644 --- a/Resources/Prototypes/SS220/Catalog/Fills/Lockers/service.yml +++ b/Resources/Prototypes/SS220/Catalog/Fills/Lockers/service.yml @@ -14,6 +14,8 @@ - id: CrayonRainbow - id: ClownStampBox #ss220-fake-stump-update - id: ClownMimeCyborgInstruction #ss220-clownmimecyborg-update + - id: MaterialBananium1 #ss220-clownmimecyborg-update + - id: MaterialBananium1 #ss220-clownmimecyborg-update - !type:NestedSelector tableId: AllToyWeaponsBundleTable prob: 0.075 @@ -47,3 +49,5 @@ - id: CrayonMime - id: ClownStampBox #ss220-fake-stump-update - id: ClownMimeCyborgInstruction #ss220-clownmimecyborg-update + - id: MaterialBananium1 #ss220-clownmimecyborg-update + - id: MaterialBananium1 #ss220-clownmimecyborg-update diff --git a/Resources/Prototypes/SS220/Entities/Mobs/Cyborgs/borg_chassis_clown_mime.yml b/Resources/Prototypes/SS220/Entities/Mobs/Cyborgs/borg_chassis_clown_mime.yml index faff8a893d99..3c9937898ec9 100644 --- a/Resources/Prototypes/SS220/Entities/Mobs/Cyborgs/borg_chassis_clown_mime.yml +++ b/Resources/Prototypes/SS220/Entities/Mobs/Cyborgs/borg_chassis_clown_mime.yml @@ -59,6 +59,8 @@ moduleWhitelist: tags: - BorgModuleGeneric + - BorgModuleClown + - BorgModuleMime hasMindState: ClownMime_e noMindState: ClownMime_e_r - type: Construction @@ -68,7 +70,7 @@ containers: borg_module: - BorgModuleClown - - BorgModuleMime + - BorgModuleMime - type: AccessReader access: [["Command"], ["Research"], ["Theatre"]] - type: InteractionPopup @@ -79,4 +81,4 @@ - type: RandomMetadata nameSegments: [names_borg] - type: Input - context: "human" \ No newline at end of file + context: "human" diff --git a/Resources/Prototypes/SS220/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/SS220/Entities/Mobs/Player/silicon.yml index 65237990edff..479f4e53d5b0 100644 --- a/Resources/Prototypes/SS220/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/SS220/Entities/Mobs/Player/silicon.yml @@ -4,7 +4,7 @@ description: View a Crew Monitoring Interface. components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: crew_monitor keywords: [ "AI", "console", "interface" ] @@ -17,7 +17,7 @@ description: View a Communications Interface. components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: comms_console keywords: [ "AI", "console", "interface" ] @@ -30,7 +30,7 @@ description: View a Station Criminal Record components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: criminal_records keywords: [ "AI", "console", "interface" ] @@ -43,7 +43,7 @@ description: View a Borg info components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: robotics_console keywords: [ "AI", "console", "interface" ] @@ -56,7 +56,7 @@ description: View a Station Map components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: station_map keywords: [ "AI", "console", "interface" ] @@ -69,7 +69,7 @@ description: View a Power of Station components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: power_console keywords: [ "AI", "console", "interface" ] @@ -82,7 +82,7 @@ description: View a Alerts on Station components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: alert_console keywords: [ "AI", "console", "interface" ] @@ -95,7 +95,7 @@ description: View a Mass Scanner Interface. components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: mass_scanner keywords: [ "AI", "console", "interface" ] @@ -108,7 +108,7 @@ description: View a Cargo Ordering Interface. components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: cargo_console keywords: [ "AI", "console", "interface" ] @@ -121,7 +121,7 @@ description: View a RaD interface components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: rad_console keywords: [ "AI", "console", "interface" ] @@ -134,7 +134,7 @@ description: View a Solar Control Interface. components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: solar_console keywords: [ "AI", "console", "interface" ] @@ -147,12 +147,12 @@ description: View a SM interface components: - type: InstantAction - icon: + icon: sprite: SS220/Interface/Actions/actions_ai.rsi # SS220-Resprite state: sm_console keywords: [ "AI", "console", "interface" ] priority: -10 - event: !type:ToggleIntrinsicUIEvent { key: enum.SuperMatterObserverUiKey.Key } + event: !type:ToggleIntrinsicUIEvent { key: enum.SuperMatterObserverUiKey.Key } - type: entity id: PlayerBorgChassisClownMimeBattery @@ -161,14 +161,22 @@ description: Clown and Mime... CloIme! suffix: Battery, Module, Ghost role components: + - type: ContainerFill + containers: + borg_brain: + - PositronicBrain + borg_module: + - BorgModuleClown + - BorgModuleMime - type: ItemSlots slots: cell_slot: name: power-cell-slot-component-slot-name-default startingItem: PowerCellHigh - type: GhostRole - name: BorgChassisClownMime + name: ghost-role-information-clownmime-cyborg-name + description: ghost-role-information-clownmime-cyborg-description rules: ghost-role-information-silicon-rules raffle: settings: default - - type: GhostTakeoverAvailable \ No newline at end of file + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/SS220/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/SS220/Entities/Objects/Specific/Robotics/borg_modules.yml index 99e48cc9657e..b1c96748abbc 100644 --- a/Resources/Prototypes/SS220/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/SS220/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -73,6 +73,9 @@ - state: ClownMime - state: icon-ClownMime sprite: SS220/Objects/Specific/Robotics/borgmodule.rsi + - type: Tag + tags: + - BorgModuleClown - type: ItemBorgModule items: - BluespaceCrayon @@ -92,13 +95,16 @@ - state: ClownMime - state: icon-ClownMime sprite: SS220/Objects/Specific/Robotics/borgmodule.rsi + - type: Tag + tags: + - BorgModuleClown - type: ItemBorgModule items: - - BikeHornInstrument + - BananiumHorn - ClownRecorder - RubberChicken - LauncherCreamPieCyborg - ToyFigurineClown - type: BorgModuleIcon icon: { sprite: Interface/Actions/actions_borg.rsi, state: clowning-module } -#SS220 ClownMime borg end \ No newline at end of file +#SS220 ClownMime borg end diff --git a/Resources/Prototypes/SS220/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/SS220/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 9b0bc742bd13..3e025f4b1f1f 100644 --- a/Resources/Prototypes/SS220/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/SS220/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -13,7 +13,7 @@ - state: piecannon map: [ "enum.GunVisualLayers.Base" ] - type: RechargeBasicEntityAmmo - rechargeCooldown: 0.75 + rechargeCooldown: 5 rechargeSound: path: /Audio/Weapons/Guns/MagIn/kinetic_reload.ogg - type: BasicEntityAmmoProvider diff --git a/Resources/Prototypes/SS220/tags.yml b/Resources/Prototypes/SS220/tags.yml index de95a31e3edd..5449cbe81439 100644 --- a/Resources/Prototypes/SS220/tags.yml +++ b/Resources/Prototypes/SS220/tags.yml @@ -200,3 +200,15 @@ # SS220 ClownMimeCyborg - type: Tag id: ClothingMaskMime + +- type: Tag + id: BorgModuleClown + +- type: Tag + id: BorgModuleMime + +- type: Tag + id: Baguette + +- type: Tag + id: BananiumHorn From c45f1be3fb794e847f7a62eaab22810f6ac0d960 Mon Sep 17 00:00:00 2001 From: Maxon Date: Thu, 20 Feb 2025 16:34:16 +0000 Subject: [PATCH 28/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 38 ++++++++++++++++------------ 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index ca48de0e41a2..4a3342206f33 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,20 +1,4 @@ Entries: -- author: ReeZii - changes: - - message: "\u0420\u0418\u0422\u042D\u0413 \u0442\u0435\u043F\u0435\u0440\u044C\ - \ \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u0435\u0441\u043A\u0438 \u0442\ - \u0435\u0440\u044F\u0435\u0442 \u0441\u0432\u043E\u0439 \u0437\u0430\u043F\u0430\ - \u0441 \u0440\u0430\u0434\u0438\u0430\u0446\u0438\u0438" - type: Add - - message: "\u0423 \u043B\u0435\u0433\u043A\u043E\u0433\u043E \u0441\u043A\u0430\ - \u0444\u0430\u043D\u0434\u0440\u0430 \u0443\u0442\u0438\u043B\u0438\u0437\u0430\ - \u0442\u043E\u0440\u0430 \u0437\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 \u0440\ - \u0430\u0434\u0438\u0430\u0446\u0438\u0438 \u0441\u043D\u0438\u0436\u0435\u043D\ - \u0430 \u0434\u043E 20%" - type: Fix - id: 329 - time: '2024-07-28T23:13:11.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1465 - author: MIXnikita changes: - message: "\u0418\u0437\u043C\u0435\u043D\u0451\u043D \u0441\u043F\u0435\u0446\u044D\ @@ -6162,3 +6146,25 @@ id: 829 time: '2025-02-20T09:29:18.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2592 +- author: Burenov + changes: + - message: "\u0423\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0430 \u043E\u0442\u0441\ + \u0440\u043E\u0447\u043A\u0430 \u0441\u0442\u0440\u0435\u043B\u044C\u0431\u044B\ + \ \u0443 \u043F\u0438\u0440\u043E\u0433\u043E\u043C\u0451\u0442\u0430!" + type: Tweak + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0431\u0430\u043D\u0430\ + \u043D\u0438\u0443\u043C\u043E\u0432\u044B\u0439 \u043A\u043B\u0430\u043A\u0441\ + \u043E\u043D \u0432 \u043A\u0440\u0430\u0444\u0442!" + type: Tweak + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043E\ + \u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0432\u0441\u0442\u0430\ + \u0432\u043B\u044F\u0442\u044C \u0440\u043E\u0434\u043D\u044B\u0435 \u043C\u043E\ + \u0434\u0443\u043B\u0438 \u0431\u043E\u0440\u0433\u0430!" + type: Fix + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u043F\ + \u0438\u0441\u0430\u043D\u0438\u0435 \u0433\u043E\u0441\u0442\u0440\u043E\u043B\ + \u0438!" + type: Fix + id: 830 + time: '2025-02-20T16:33:10.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2594 From f389ca65c84f5054a67fec4617cc16252b9724c4 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Thu, 20 Feb 2025 23:20:11 +0300 Subject: [PATCH 29/46] Add priority join for sponsors (#2577) * Add priority join for sponsors * oops * Rename CVar * Rename CVar 2 * Sort lambda --- .../Connection/ConnectionManager.cs | 10 +-- .../Corvax/JoinQueue/JoinQueueManager.cs | 56 ++++++++++++++-- .../SS220/Discord/DiscordPlayerManager.cs | 65 ++++++++++++++++++- Content.Shared/SS220/CCVars/CCVars220.cs | 6 ++ 4 files changed, 126 insertions(+), 11 deletions(-) diff --git a/Content.Server/Connection/ConnectionManager.cs b/Content.Server/Connection/ConnectionManager.cs index c15127b532f8..1ceb99d79605 100644 --- a/Content.Server/Connection/ConnectionManager.cs +++ b/Content.Server/Connection/ConnectionManager.cs @@ -245,7 +245,8 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame // Corvax-Start: Allow privileged players bypass bunker var isPrivileged = await HavePrivilegedJoin(e.UserId); - if (_cfg.GetCVar(CCVars.PanicBunkerEnabled) && adminData == null && !isPrivileged) + var sponsorBypass = await _discordPlayerManager.HasPriorityJoinTierAsync(e.UserId) && _discordPlayerManager.HaveFreeSponsorSlot(); // SS220 Sponsors + if (_cfg.GetCVar(CCVars.PanicBunkerEnabled) && adminData == null && !isPrivileged && !sponsorBypass) // SS220 Sponsors // Corvax-End { var showReason = _cfg.GetCVar(CCVars.PanicBunkerShowReason); @@ -306,7 +307,8 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame softPlayerCount -= _adminManager.ActiveAdmins.Count(); } - if ((softPlayerCount >= _cfg.GetCVar(CCVars.SoftMaxPlayers) && !adminBypass) && !wasInGame && !isQueueEnabled) // Corvax-Queue + if ((softPlayerCount >= _cfg.GetCVar(CCVars.SoftMaxPlayers) && !adminBypass && !wasInGame && !isQueueEnabled && // Corvax-Queue + !sponsorBypass)) // SS220 Sponsors { return (ConnectionDenyReason.Full, Loc.GetString("soft-player-cap-full"), null); } @@ -397,12 +399,12 @@ private bool HasTemporaryBypass(NetUserId user) public async Task HavePrivilegedJoin(NetUserId userId) { var isAdmin = await _db.GetAdminDataForAsync(userId) != null; - var havePriorityJoin = _sponsorsManager.TryGetInfo(userId, out var sponsor) && sponsor.HavePriorityJoin; // Corvax-Sponsors + // var havePriorityJoin = _sponsorsManager.TryGetInfo(userId, out var sponsor) && sponsor.HavePriorityJoin; // SS220 Sponsors var wasInGame = EntitySystem.TryGet(out var ticker) && ticker.PlayerGameStatuses.TryGetValue(userId, out var status) && status == PlayerGameStatus.JoinedGame; return isAdmin || - havePriorityJoin || // Corvax-Sponsors + //havePriorityJoin || // SS220 Sponsors wasInGame; } // Corvax-Queue-End diff --git a/Content.Server/Corvax/JoinQueue/JoinQueueManager.cs b/Content.Server/Corvax/JoinQueue/JoinQueueManager.cs index aecd55de228a..b5ccf921274f 100644 --- a/Content.Server/Corvax/JoinQueue/JoinQueueManager.cs +++ b/Content.Server/Corvax/JoinQueue/JoinQueueManager.cs @@ -5,6 +5,7 @@ using Content.Shared.CCVar; using Content.Shared.Corvax.CCCVars; using Content.Shared.Corvax.JoinQueue; +using Content.Shared.Destructible; using Prometheus; using Robust.Server.Player; using Robust.Shared.Configuration; @@ -87,9 +88,10 @@ private async void OnPlayerVerified(object? sender, ICommonSession session) } var isPrivileged = await _connectionManager.HavePrivilegedJoin(session.UserId); + var sponsorBypass = await _discordPlayerManager.HasPriorityJoinTierAsync(session.UserId) && _discordPlayerManager.HaveFreeSponsorSlot(); // SS220 Sponsor var currentOnline = _playerManager.PlayerCount - 1; // Do not count current session in general online, because we are still deciding her fate var haveFreeSlot = currentOnline < _cfg.GetCVar(CCVars.SoftMaxPlayers); - if (isPrivileged || haveFreeSlot) + if (isPrivileged || haveFreeSlot || sponsorBypass) // SS220 Sponsor { SendToGame(session); @@ -130,17 +132,37 @@ private void ProcessQueue(bool isDisconnect, DateTime connectedTime) if (isDisconnect) players--; // Decrease currently disconnected session but that has not yet been deleted - var haveFreeSlot = players < _cfg.GetCVar(CCVars.SoftMaxPlayers); + // SS220 sponsors begin + //var haveFreeSlot = players < _cfg.GetCVar(CCVars.SoftMaxPlayers); + //var haveFreeSponsorSlot = _connectionManager.HaveFreeSponsorSlot(); // SS220 sponsors + //var queueContains = _queue.Count > 0; + //if (haveFreeSlot && queueContains) + //{ + // var session = _queue.First(); + // _queue.Remove(session); + + // SendToGame(session); + + // QueueTimings.WithLabels("Waited").Observe((DateTime.UtcNow - connectedTime).TotalSeconds); + //} + var queueContains = _queue.Count > 0; - if (haveFreeSlot && queueContains) + if (queueContains) { + SortQueueBySponsors(); var session = _queue.First(); - _queue.Remove(session); - SendToGame(session); + var canDequeue = CanDequeue(players, session); + if (canDequeue) + { + _queue.Remove(session); + + SendToGame(session); - QueueTimings.WithLabels("Waited").Observe((DateTime.UtcNow - connectedTime).TotalSeconds); + QueueTimings.WithLabels("Waited").Observe((DateTime.UtcNow - connectedTime).TotalSeconds); + } } + // SS220 sponsors end SendUpdateMessages(); QueueCount.Set(_queue.Count); @@ -169,4 +191,26 @@ private void SendToGame(ICommonSession s) { Timer.Spawn(0, () => _playerManager.JoinGame(s)); } + + // SS220 sponsors begin + private void SortQueueBySponsors() + { + _queue.Sort((ICommonSession s1, ICommonSession s2) => + { + var s1HasPriorityJoin = _discordPlayerManager.HasPriorityJoinTier(s1.UserId); + var s2HasPriorityJoin = _discordPlayerManager.HasPriorityJoinTier(s2.UserId); + if (s1HasPriorityJoin && !s2HasPriorityJoin) return -1; + else if (!s1HasPriorityJoin && s2HasPriorityJoin) return 1; + else return 0; + }); + } + + private bool CanDequeue(int actualPlayers, ICommonSession session) + { + var sponsorBypass = _discordPlayerManager.HasPriorityJoinTier(session.UserId) && _discordPlayerManager.HaveFreeSponsorSlot(); + var haveFreeSlot = actualPlayers < _cfg.GetCVar(CCVars.SoftMaxPlayers); + + return haveFreeSlot || sponsorBypass; + } + // SS220 sponsors end } diff --git a/Content.Server/SS220/Discord/DiscordPlayerManager.cs b/Content.Server/SS220/Discord/DiscordPlayerManager.cs index cfea81048248..b27d594552ff 100644 --- a/Content.Server/SS220/Discord/DiscordPlayerManager.cs +++ b/Content.Server/SS220/Discord/DiscordPlayerManager.cs @@ -1,5 +1,7 @@ // © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using System.Diagnostics.CodeAnalysis; +using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; @@ -9,7 +11,9 @@ using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; +using Content.Server.Administration.Managers; using Content.Server.Database; +using Content.Shared.CCVar; using Content.Shared.Players; using Content.Shared.SS220.CCVars; using Content.Shared.SS220.Discord; @@ -29,6 +33,7 @@ public sealed class DiscordPlayerManager : IPostInjectInit, IDisposable [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IServerNetManager _netMgr = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; private ISawmill _sawmill = default!; private Timer? _statusRefreshTimer; // We should keep reference or else evil GC will kill our timer @@ -40,6 +45,16 @@ public sealed class DiscordPlayerManager : IPostInjectInit, IDisposable public event EventHandler? PlayerVerified; + private volatile Dictionary _cachedSponsorInfo = new(); + + public List PriorityJoinTiers = + [ + SponsorTier.BigShlopa, + SponsorTier.HugeShlopa, + SponsorTier.GoldenShlopa, + SponsorTier.CriticalMassShlopa + ]; + public void Initialize() { _sawmill = Logger.GetSawmill("DiscordPlayerManager"); @@ -127,11 +142,17 @@ private async void PlayerManager_PlayerStatusChanged(object? sender, SessionStat { await UpdateUserDiscordRolesStatus(e); } + + if (e.NewStatus == SessionStatus.Disconnected) + { + _cachedSponsorInfo.Remove(e.Session.UserId); + } } private async Task UpdateUserDiscordRolesStatus(SessionStatusEventArgs e) { - var info = await GetSponsorInfo(e.Session.UserId); + await UpdateSponsorInfo(e.Session.UserId); + _cachedSponsorInfo.TryGetValue(e.Session.UserId, out var info); if (info is not null) { @@ -327,4 +348,46 @@ private static JsonSerializerOptions GetJsonSerializerOptions() private sealed record AccountLinkResponseParameters(string AccountLinkUrl); private sealed record DiscordAuthInfoResponse(bool AccountLinked); + + public async Task UpdateSponsorInfo(NetUserId userId) + { + var sponsorInfo = await GetSponsorInfo(userId); + _cachedSponsorInfo[userId] = sponsorInfo; + } + + public async Task HasPriorityJoinTierAsync(NetUserId userId) + { + await UpdateSponsorInfo(userId); + return HasPriorityJoinTier(await GetSponsorInfo(userId)); + } + + public bool HasPriorityJoinTier(NetUserId userId) + { + TryGetSponsorTierFromCache(userId, out var info); + return HasPriorityJoinTier(info); + } + + public bool HasPriorityJoinTier(DiscordSponsorInfo? info) + { + return info != null && info.Tiers.Any(t => PriorityJoinTiers.Contains(t)); + } + + public bool TryGetSponsorTierFromCache(NetUserId userId, [NotNullWhen(true)] out DiscordSponsorInfo? info) + { + return _cachedSponsorInfo.TryGetValue(userId, out info) && info != null; + } + + public bool HaveFreeSponsorSlot() + { + var maxPlayers = _cfg.GetCVar(CCVars.SoftMaxPlayers); + var maxLimitExcending = _cfg.GetCVar(CCVars220.MaxSponsorsBypass); + + var playerCount = _playerManager.Sessions.Where(s => s.Status is SessionStatus.InGame).Count(); + if (!_cfg.GetCVar(CCVars.AdminsCountForMaxPlayers)) + { + playerCount -= _adminManager.ActiveAdmins.Count(); + } + + return playerCount < maxPlayers + maxLimitExcending; + } } diff --git a/Content.Shared/SS220/CCVars/CCVars220.cs b/Content.Shared/SS220/CCVars/CCVars220.cs index b8b6a28f7a62..3f5db5566325 100644 --- a/Content.Shared/SS220/CCVars/CCVars220.cs +++ b/Content.Shared/SS220/CCVars/CCVars220.cs @@ -118,4 +118,10 @@ public sealed partial class CCVars220 /// public static readonly CVarDef GameYearDelta = CVarDef.Create("date.game_year_delta", 544, CVar.SERVER | CVar.REPLICATED); + + ///

+ /// How many sponsors can connect to the server beyond the player limit + /// + public static readonly CVarDef MaxSponsorsBypass = + CVarDef.Create("game.max_sponsors_bypass", 10, CVar.SERVER); } From 43f98ef8c81b613230946680ed3a27e620315d42 Mon Sep 17 00:00:00 2001 From: Maxon Date: Thu, 20 Feb 2025 20:21:16 +0000 Subject: [PATCH 30/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 4a3342206f33..12d8d5a590f5 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,13 +1,4 @@ Entries: -- author: MIXnikita - changes: - - message: "\u0418\u0437\u043C\u0435\u043D\u0451\u043D \u0441\u043F\u0435\u0446\u044D\ - \u0444\u0444\u0435\u043A\u0442 \u0441\u0442\u0440\u0435\u043B\u044C\u0431\u044B\ - \ \u0438\u0437 \u043E\u0433\u043D\u0435\u0441\u0442\u0440\u0435\u043B\u0430." - type: Tweak - id: 330 - time: '2024-07-28T23:26:51.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1469 - author: stalengd changes: - message: "\u041F\u043E\u0440\u0442\u0430\u0442\u0438\u0432\u043D\u044B\u0439 \u0433\ @@ -6168,3 +6159,15 @@ id: 830 time: '2025-02-20T16:33:10.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2594 +- author: Kirus59 + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043F\u0440\u043E\ + \u0445\u043E\u0434\u043A\u0430, \u0434\u043B\u044F \u0411\u043E\u043B\u044C\u0448\ + \u0438\u0445 \u0428\u043B\u0451\u043F \u0438 \u0432\u044B\u0448\u0435 - \u0441\ + \u0432\u0435\u0440\u0445 \u043B\u0438\u043C\u0438\u0442\u0430 \u0438\u0433\u0440\ + \u043E\u043A\u043E\u0432 (\u0434\u043E 10 \u0447\u0435\u043B\u043E\u0432\u0435\ + \u043A)." + type: Add + id: 831 + time: '2025-02-20T20:20:12.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2577 From 6b5151e77f1a0cd4116f9e0db0f0939a5afb9683 Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Fri, 21 Feb 2025 20:41:22 +0200 Subject: [PATCH 31/46] ADD: Cloning Entity now copy DNA from source (#2597) * ADD: Cloning Entity now copy DNA from source * fix commit --- .../Forensics/Systems/ForensicsSystem.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Content.Server/Forensics/Systems/ForensicsSystem.cs b/Content.Server/Forensics/Systems/ForensicsSystem.cs index c1595dd0c13b..324345bb669e 100644 --- a/Content.Server/Forensics/Systems/ForensicsSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicsSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Reagent; using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Cloning; using Content.Shared.DoAfter; using Content.Shared.Forensics; using Content.Shared.Forensics.Components; @@ -35,6 +36,8 @@ public override void Initialize() SubscribeLocalEvent(OnFingerprintInit); SubscribeLocalEvent(OnDNAInit); + SubscribeLocalEvent(OnDNACloning); //ss220 add cloning entity copy DNA from source + SubscribeLocalEvent(OnBeingGibbed); SubscribeLocalEvent(OnMeleeHit); SubscribeLocalEvent(OnRehydrated); @@ -79,6 +82,19 @@ private void OnDNAInit(EntityUid uid, DnaComponent component, MapInitEvent args) } } + //ss220 add cloning entity copy DNA from source start + private void OnDNACloning(Entity ent, ref CloningEvent args) + { + if (!TryComp(args.Target, out var sourceDnaComp)) + return; + + sourceDnaComp.DNA = ent.Comp.DNA; + + var ev = new GenerateDnaEvent { Owner = args.Target, DNA = ent.Comp.DNA }; + RaiseLocalEvent(args.Target, ref ev); + } + //ss220 add cloning entity copy DNA from source end + private void OnBeingGibbed(EntityUid uid, ForensicsComponent component, BeingGibbedEvent args) { string dna = Loc.GetString("forensics-dna-unknown"); From bb43864e96fe5bda9075e22a9fc7f4a664aa8463 Mon Sep 17 00:00:00 2001 From: Maxon Date: Fri, 21 Feb 2025 18:42:26 +0000 Subject: [PATCH 32/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 12d8d5a590f5..effa057d5be5 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,18 +1,4 @@ Entries: -- author: stalengd - changes: - - message: "\u041F\u043E\u0440\u0442\u0430\u0442\u0438\u0432\u043D\u044B\u0439 \u0433\ - \u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440 \u041C.\u0418.\u041D.\u0418\ - .\u041F.\u0410.\u041A.\u041C.\u0410.\u041D. \u0442\u0435\u043F\u0435\u0440\u044C\ - \ \u043F\u043E\u0442\u0440\u0435\u0431\u043B\u044F\u0435\u0442 \u043F\u0440\u0430\ - \u0432\u0438\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\ - \u0441\u0442\u0432\u043E \u0442\u043E\u043F\u043B\u0438\u0432\u0430, \u0442\u0435\ - \u043C \u0441\u0430\u043C\u044B\u043C \u0440\u0430\u0431\u043E\u0442\u0430\u0435\ - \u0442 \u0434\u043E\u043B\u044C\u0448\u0435." - type: Fix - id: 331 - time: '2024-07-28T23:28:37.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1471 - author: MIXnikita changes: - message: "\u0418\u0437\u043C\u0435\u043D\u0451\u043D \u0441\u043F\u0440\u0430\u0439\ @@ -6171,3 +6157,13 @@ id: 831 time: '2025-02-20T20:20:12.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2577 +- author: ReeZii + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438 \u043A\u043B\ + \u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438, \u043A\u043B\u043E\ + \u043D \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 \u0414\u041D\u041A \u043E\ + \u0440\u0438\u0433\u0438\u043D\u0430\u043B\u0430" + type: Add + id: 832 + time: '2025-02-21T18:41:22.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2597 From 134ae8eb42e4147b38a604e3759b1ea95654112c Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Sat, 22 Feb 2025 07:24:16 +0200 Subject: [PATCH 33/46] ADD: Emagging nanomed now contains stimpack mini (#2604) * ADD: Emagging nanomed now contains stimpack mini * gigiggi --- .../Catalog/VendingMachines/Inventories/medical.yml | 4 ++++ .../Catalog/VendingMachines/Inventories/wallmed.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index a96f49e7dba5..b27ea46aab4c 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -13,3 +13,7 @@ CigPackMED: 1 #SS220 Cigarettes contrabandInventory: FoodApple: 1 + #ss220 mini stimpack for nanomed start + emaggedInventory: + StimpackMini: 1 + #ss220 mini stimpack for nanomed end diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml index e0e0dcd1dac1..f473718b33b3 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/wallmed.yml @@ -8,3 +8,7 @@ Syringe: 3 contrabandInventory: PowerCellSmall: 2 + #ss220 mini stimpack for nanomed start + emaggedInventory: + StimpackMini: 1 + #ss220 mini stimpack for nanomed end From 4dbccf37b330ae324ba10563f97118ce2978844f Mon Sep 17 00:00:00 2001 From: Maxon Date: Sat, 22 Feb 2025 05:25:21 +0000 Subject: [PATCH 34/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index effa057d5be5..4da9d604b7fd 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,16 +1,4 @@ Entries: -- author: MIXnikita - changes: - - message: "\u0418\u0437\u043C\u0435\u043D\u0451\u043D \u0441\u043F\u0440\u0430\u0439\ - \u0442 \u0414\u0430\u0441\u0442\u0435\u0440\u0430." - type: Tweak - - message: "\u0423\u0431\u0440\u0430\u043D \u0414\u0430\u0441\u0442\u0435\u0440\ - \ \u0438\u0437 \u0438\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\ - \u0439 \u0420\u043D\u0414." - type: Remove - id: 332 - time: '2024-07-28T23:30:02.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1472 - author: kirus59 changes: - message: "\u041C\u0438\u043A\u0440\u043E\u0432\u043E\u043B\u043D\u043E\u0432\u043A\ @@ -6167,3 +6155,13 @@ id: 832 time: '2025-02-21T18:41:22.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2597 +- author: ReeZii + changes: + - message: "\u0412 \u0435\u043C\u0430\u0433\u043D\u0443\u0442\u044B\u0439 \u043D\ + \u0430\u043D\u043E\u043C\u0435\u0434 \u0438 \u043D\u0430\u043D\u043E\u043C\u0435\ + \u0434 \u043F\u043B\u044E\u0441 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\ + \ \u043C\u0438\u043D\u0438-\u0441\u0442\u0438\u043C\u043F\u0430\u043A" + type: Add + id: 833 + time: '2025-02-22T05:24:17.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2604 From 4dfd16ae12463faee2eab3e87b37c268709a69c2 Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Sat, 22 Feb 2025 07:25:37 +0200 Subject: [PATCH 35/46] ADD: Beer can to survival kit for Dwarf (#2603) * ADD: Beer can to survival kit for Dwarf * suka --- .../catalog/fills/boxes/emergency.ftl | 4 ++++ .../objects/consumable/drinks/drinks.ftl | 6 +++-- .../Loadouts/Miscellaneous/survival.yml | 2 +- .../Prototypes/Loadouts/loadout_groups.yml | 1 + .../SS220/Catalog/Fills/Boxes/emergency.yml | 22 +++++++++++++++++++ .../SS220/Loadouts/Miscellaneous/survival.yml | 16 ++++++++++++++ 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/Resources/Locale/ru-RU/ss220/prototypes/catalog/fills/boxes/emergency.ftl b/Resources/Locale/ru-RU/ss220/prototypes/catalog/fills/boxes/emergency.ftl index cfe1e817f555..94cee36f182a 100644 --- a/Resources/Locale/ru-RU/ss220/prototypes/catalog/fills/boxes/emergency.ftl +++ b/Resources/Locale/ru-RU/ss220/prototypes/catalog/fills/boxes/emergency.ftl @@ -5,3 +5,7 @@ ent-BoxSurvivalBrigmedic = аварийный запас ent-BoxSurvivalBrigmedicNitrogen = аварийный запас .desc = {ent-BoxSurvival} .suffix = Мед-СБ Азот + +ent-BoxSurvivalBeerDrinker = аварийный запас + .desc = {ent-BoxSurvival} + .suffix = Пиво diff --git a/Resources/Locale/ru-RU/ss220/prototypes/entities/objects/consumable/drinks/drinks.ftl b/Resources/Locale/ru-RU/ss220/prototypes/entities/objects/consumable/drinks/drinks.ftl index 36d3bd17c114..be98c0eb1f7c 100644 --- a/Resources/Locale/ru-RU/ss220/prototypes/entities/objects/consumable/drinks/drinks.ftl +++ b/Resources/Locale/ru-RU/ss220/prototypes/entities/objects/consumable/drinks/drinks.ftl @@ -8,5 +8,7 @@ ent-DrinkEggnogGlass = { ent-DrinkGlass } .suffix = гоголь-моголь .desc = { ent-DrinkGlass.desc } ent-DrinkBacchusGlass = { ent-DrinkGlass } - .suffix = благославение бахуса - .desc = { ent-DrinkGlass.desc } \ No newline at end of file + .suffix = благославение бахуса + .desc = { ent-DrinkGlass.desc } +ent-DrinkBeerCan = банка пива + .desc = Маленькая радость, великолепный вкус, никаких забот! diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml b/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml index 3b64b8023c35..8240feb3ee46 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/survival.yml @@ -14,7 +14,7 @@ species: - Arachnid - Diona - - Dwarf + #- Dwarf #ss220 add beer can for dwarf survival kit - Felinid #ss220 box survival loadout felinid fix - Tajaran #SS220 Tajaran-add - Human diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index c76c6b8697eb..81718dabd1da 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -96,6 +96,7 @@ loadouts: - EmergencyNitrogen - EmergencyOxygen + - EmergencyBeerDrinker #ss220 add beer can for dwarf survival kit - LoadoutSpeciesVoxNitrogen - type: loadoutGroup diff --git a/Resources/Prototypes/SS220/Catalog/Fills/Boxes/emergency.yml b/Resources/Prototypes/SS220/Catalog/Fills/Boxes/emergency.yml index b0f481ba9956..955bf8b46e59 100644 --- a/Resources/Prototypes/SS220/Catalog/Fills/Boxes/emergency.yml +++ b/Resources/Prototypes/SS220/Catalog/Fills/Boxes/emergency.yml @@ -16,3 +16,25 @@ - id: DrinkWaterBottleFull - type: Label currentLabel: reagent-name-nitrogen + +- type: entity + parent: BoxSurvival + id: BoxSurvivalBeerDrinker + suffix: Standard Beer + components: + - type: StorageFill + contents: + - id: ClothingMaskBreath + - id: EmergencyOxygenTankFilled + - id: EmergencyMedipen + - id: SpaceMedipen # SS220 Revert deleted Medipen + - id: Flare + - id: FoodSnackNutribrick + - id: DrinkWaterBottleFull + - id: DrinkBeerCan + - type: Sprite + layers: + - state: internals + - state: emergencytank + - type: Label + currentLabel: reagent-name-beer diff --git a/Resources/Prototypes/SS220/Loadouts/Miscellaneous/survival.yml b/Resources/Prototypes/SS220/Loadouts/Miscellaneous/survival.yml index 991794b067ec..a9f10708a54f 100644 --- a/Resources/Prototypes/SS220/Loadouts/Miscellaneous/survival.yml +++ b/Resources/Prototypes/SS220/Loadouts/Miscellaneous/survival.yml @@ -15,3 +15,19 @@ storage: back: - BoxSurvivalBrigmedicNitrogen + +- type: loadout + id: EmergencyBeerDrinker + effects: + - !type:GroupLoadoutEffect + proto: BeerDrinker + storage: + back: + - BoxSurvivalBeerDrinker + +- type: loadoutEffectGroup + id: BeerDrinker + effects: + - !type:SpeciesLoadoutEffect + species: + - Dwarf From 57d6b06eefd5a4883d0b070541c2c09c11291316 Mon Sep 17 00:00:00 2001 From: Maxon Date: Sat, 22 Feb 2025 05:26:41 +0000 Subject: [PATCH 36/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 4da9d604b7fd..33ad5ab2127a 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,22 +1,4 @@ Entries: -- author: kirus59 - changes: - - message: "\u041C\u0438\u043A\u0440\u043E\u0432\u043E\u043B\u043D\u043E\u0432\u043A\ - \u0438 \u043D\u0430 \u0430\u0432\u0430\u043D\u043F\u043E\u0441\u0442\u0435 \u0438\ - \ \u0448\u0430\u0442\u0442\u043B\u0435 \u042F\u041E \u0437\u0430\u043C\u0435\ - \u043D\u0435\u043D\u044B \u043D\u0430 \u043C\u0438\u043A\u0440\u043E\u0432\u043E\ - \u043B\u043D\u043E\u0432\u043A\u0438 \u0441\u0438\u043D\u0434\u0438\u043A\u0430\ - \u0442\u0430." - type: Tweak - - message: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D \u0448\u0430\u043D\u0441\ - \ \u0432\u0437\u0440\u044B\u0432\u0430 \u043C\u0438\u043A\u0440\u043E\u0432\u043E\ - \u043B\u043D\u043E\u0432\u043A\u0438 \u0441\u0438\u043D\u0434\u0438\u043A\u0430\ - \u0442\u0430, \u043F\u0440\u0438 \u0436\u0430\u0440\u043A\u0435 Id \u043A\u0430\ - \u0440\u0442\u044B \u0441\u043E 100% -> 10%" - type: Tweak - id: 333 - time: '2024-07-28T23:31:59.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1473 - author: stalengd changes: - message: "\u0417\u0430\u0442\u0432\u043E\u0440\u044B \u043D\u0430 \u0448\u0430\ @@ -6165,3 +6147,13 @@ id: 833 time: '2025-02-22T05:24:17.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2604 +- author: ReeZii + changes: + - message: "\u0414\u0432\u043E\u0440\u0444\u0430\u043C \u0432 \u0430\u0432\u0430\ + \u0440\u0438\u0439\u043D\u044B\u0439 \u0437\u0430\u043F\u0430\u0441 \u0431\u044B\ + \u043B\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0431\u0430\ + \u043D\u043A\u0430 \u043F\u0438\u0432\u0430" + type: Add + id: 834 + time: '2025-02-22T05:25:37.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2603 From b6067663b95a8b8351ec1280519548f38d50467a Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Sat, 22 Feb 2025 12:17:52 +0200 Subject: [PATCH 37/46] ADD: Change voice in voice mask when clicking on target (#2605) --- Content.Server/VoiceMask/VoiceMaskSystem.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Content.Server/VoiceMask/VoiceMaskSystem.cs b/Content.Server/VoiceMask/VoiceMaskSystem.cs index 85fb89526518..b3dc12b2d71b 100644 --- a/Content.Server/VoiceMask/VoiceMaskSystem.cs +++ b/Content.Server/VoiceMask/VoiceMaskSystem.cs @@ -3,10 +3,12 @@ using Content.Shared.Chat; using Content.Shared.Clothing; using Content.Shared.Database; +using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared.Popups; using Content.Shared.Preferences; using Content.Shared.Speech; +using Content.Shared.SS220.TTS; using Content.Shared.VoiceMask; using Robust.Server.GameObjects; using Robust.Shared.Prototypes; @@ -31,6 +33,8 @@ public override void Initialize() InitializeTTS(); // Corvax-TTS SubscribeLocalEvent(OnEquip); SubscribeLocalEvent(OpenUI); + + SubscribeLocalEvent(OnInteract); //ss220 change voice in mask when clicking on target } private void OnTransformSpeakerName(Entity entity, ref InventoryRelayedEvent args) @@ -95,6 +99,17 @@ private void UpdateUI(Entity entity) if (_uiSystem.HasUi(entity, VoiceMaskUIKey.Key)) _uiSystem.SetUiState(entity.Owner, VoiceMaskUIKey.Key, new VoiceMaskBuiState(GetCurrentVoiceName(entity), entity.Comp.VoiceMaskSpeechVerb, entity.Comp.VoiceId)); //Corvax-TTS } + + //ss220 change voice in mask when clicking on target start + private void OnInteract(Entity ent, ref AfterInteractEvent args) + { + if (!TryComp(args.Target, out var ttsComponent) + || ttsComponent.VoicePrototypeId == null) + return; + + RaiseLocalEvent(ent.Owner, new VoiceMaskChangeVoiceMessage(ttsComponent.VoicePrototypeId)); + } + //ss220 change voice in mask when clicking on target end #endregion #region Helper functions From 7e2e66bc7529de384904a34dcb678b95cb6f7d58 Mon Sep 17 00:00:00 2001 From: Maxon Date: Sat, 22 Feb 2025 10:18:56 +0000 Subject: [PATCH 38/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 33ad5ab2127a..1ea82c0630c8 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,15 +1,4 @@ Entries: -- author: stalengd - changes: - - message: "\u0417\u0430\u0442\u0432\u043E\u0440\u044B \u043D\u0430 \u0448\u0430\ - \u0442\u0442\u043B\u0435 \u043A\u0430\u0440\u0433\u043E \u0442\u0435\u043F\u0435\ - \u0440\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E \u0441\u043E\ - \u0435\u0434\u0438\u043D\u0435\u043D\u044B \u0441 \u043A\u043D\u043E\u043F\u043A\ - \u0430\u043C\u0438" - type: Fix - id: 334 - time: '2024-07-28T23:38:38.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1468 - author: ReeZii changes: - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u043F\ @@ -6157,3 +6146,14 @@ id: 834 time: '2025-02-22T05:25:37.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2603 +- author: ReeZii + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438 \u043D\u0430\ + \u0436\u0430\u0442\u0438\u0438 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u043E\ + \u0439 \u043C\u0430\u0441\u043A\u043E\u0439 \u043D\u0430 \u0446\u0435\u043B\u044C\ + , \u043C\u0430\u0441\u043A\u0430 \u043A\u043E\u043F\u0438\u0440\u0443\u0435\u0442\ + \ \u0435\u0435 \u0433\u043E\u043B\u043E\u0441" + type: Add + id: 835 + time: '2025-02-22T10:17:52.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2605 From f9b088a8e4b32f97504b23e8a9d464c4f734ae27 Mon Sep 17 00:00:00 2001 From: ReeZer2 <63300653+ReeZer2@users.noreply.github.com> Date: Sat, 22 Feb 2025 14:56:19 +0200 Subject: [PATCH 39/46] ADD: Pacified component to clone entity (#2598) * ADD: Pacified component to clone entity * fix fix commit --- .../CombatMode/Pacification/PacificationSystem.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Content.Shared/CombatMode/Pacification/PacificationSystem.cs b/Content.Shared/CombatMode/Pacification/PacificationSystem.cs index 6bc32c5b96c6..00d0d05d77e4 100644 --- a/Content.Shared/CombatMode/Pacification/PacificationSystem.cs +++ b/Content.Shared/CombatMode/Pacification/PacificationSystem.cs @@ -1,12 +1,14 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Actions; using Content.Shared.Alert; +using Content.Shared.Cloning; using Content.Shared.FixedPoint; using Content.Shared.IdentityManagement; using Content.Shared.Interaction.Events; using Content.Shared.Popups; using Content.Shared.Throwing; using Content.Shared.Weapons.Ranged.Events; +using Robust.Shared.Serialization.Manager; using Robust.Shared.Timing; namespace Content.Shared.CombatMode.Pacification; @@ -18,6 +20,7 @@ public sealed class PacificationSystem : EntitySystem [Dependency] private readonly SharedCombatModeSystem _combatSystem = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly ISerializationManager _serialization = default!; //ss220 add clone pacified comp to clone entity public override void Initialize() { @@ -28,6 +31,8 @@ public override void Initialize() SubscribeLocalEvent(OnAttackAttempt); SubscribeLocalEvent(OnShootAttempt); SubscribeLocalEvent(OnPacifiedDangerousAttack); + + SubscribeLocalEvent(OnCloning); //ss220 add clone pacified comp to clone entity } private bool PacifiedCanAttack(EntityUid user, EntityUid target, [NotNullWhen(false)] out string? reason) @@ -151,6 +156,15 @@ private void OnPacifiedDangerousAttack(Entity args.Cancelled = true; args.Reason = "pacified-cannot-harm-indirect"; } + + //ss220 add clone pacified comp to clone entity start + private void OnCloning(Entity ent, ref CloningEvent args) + { + RemComp(args.Target); + var newComp = EnsureComp(args.Target); + _serialization.CopyTo(ent.Comp, ref newComp, notNullableOverride: true); + } + //ss220 add clone pacified comp to clone entity end } From 91780adb4b9f74062c10996274fba5bff54092ac Mon Sep 17 00:00:00 2001 From: Maxon Date: Sat, 22 Feb 2025 12:57:25 +0000 Subject: [PATCH 40/46] Automatic changelog update --- Resources/Changelog/Changelog220.yml | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog220.yml b/Resources/Changelog/Changelog220.yml index 1ea82c0630c8..cb49a1650ab3 100644 --- a/Resources/Changelog/Changelog220.yml +++ b/Resources/Changelog/Changelog220.yml @@ -1,18 +1,4 @@ Entries: -- author: ReeZii - changes: - - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E \u043E\u043F\ - \u0438\u0441\u0430\u043D\u0438\u0435 \u0438\u043C\u043F\u043B\u0430\u043D\u0442\ - \u0430 \u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435" - type: Fix - - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0430 \u044D\u043C\ - \u043E\u0446\u0438\u044F \u0436\u0443\u0436\u0436\u0430\u043D\u0438\u044F \u0432\ - \ \u0447\u0430\u0442\u0435 \u0434\u043B\u044F \u044F\u0449\u0435\u0440\u0438\ - \u0446" - type: Fix - id: 335 - time: '2024-07-29T20:31:07.0000000+00:00' - url: https://github.com/SerbiaStrong-220/space-station-14/pull/1467 - author: Creamy changes: - message: "\u0418\u0437\u043C\u0435\u043D\u0451\u043D \u0441\u043F\u0440\u0430\u0439\ @@ -6157,3 +6143,13 @@ id: 835 time: '2025-02-22T10:17:52.0000000+00:00' url: https://github.com/SerbiaStrong-220/space-station-14/pull/2605 +- author: ReeZii + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u043F\u0440\u0438 \u043A\u043B\ + \u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438, \u0432\u043E\u0440\ + \ \u0432\u043D\u043E\u0432\u044C \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442\ + \ \u043F\u0430\u0446\u0438\u0444\u0438\u0437\u043C" + type: Fix + id: 836 + time: '2025-02-22T12:56:19.0000000+00:00' + url: https://github.com/SerbiaStrong-220/space-station-14/pull/2598 From 20efb8c6df0ce0afc282726232215f6f497417f7 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Sat, 22 Feb 2025 20:58:00 +0300 Subject: [PATCH 41/46] Try fix workflow day 74 --- .github/workflows/labeler-approve.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 8bc0d37b5f95..26d89574f570 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -31,6 +31,7 @@ jobs: if: steps.check_approvals.outputs.result == 'true' uses: actions/github-script@v7 with: + github-token: ${{ secrets.GITHUB_TOKEN }} script: | const labelsToRemove = ['Status: Needs Review', 'Status: Awaiting Changes']; const currentLabels = context.payload.pull_request.labels.map(label => label.name); From b76804aee7ae089d948aa0c824b92f9f5f4a70f7 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:04:11 +0300 Subject: [PATCH 42/46] try without permissions --- .github/workflows/labeler-approve.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 26d89574f570..f63ff7ef202c 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -8,7 +8,6 @@ jobs: remove_label: runs-on: ubuntu-latest if: github.event.review.state == 'approved' - permissions: write-all steps: - uses: actions/checkout@v4 - name: check all revs From e3edf31427a12e678d4d6eb5238b49acdf36b258 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:15:43 +0300 Subject: [PATCH 43/46] try curl --- .github/workflows/labeler-approve.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index f63ff7ef202c..b1aa70612da9 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -47,3 +47,6 @@ jobs: } env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: rm label 2 + run: | + curl -L -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/${{context.repo.owner}}/${{context.repo.repo}}/issues/${{context.payload.pull_request.number}}/labels/'Status: Needs Review' From 4848bcc047c3704ef1056c394bf13c51a63093e1 Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:20:56 +0300 Subject: [PATCH 44/46] change context --- .github/workflows/labeler-approve.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index b1aa70612da9..77eedafa2173 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -48,5 +48,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: rm label 2 + if: steps.check_approvals.outputs.result == 'true' run: | - curl -L -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/${{context.repo.owner}}/${{context.repo.repo}}/issues/${{context.payload.pull_request.number}}/labels/'Status: Needs Review' + curl -L -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/SerbiaStrong-220/space-station-14/issues/${{github.event.pull_request.number}}/labels/'Status: Needs Review' From 0ed39edc4547b7a847121fb2a3883d64b1e6a0fb Mon Sep 17 00:00:00 2001 From: Kirus59 <145689588+Kirus59@users.noreply.github.com> Date: Sat, 22 Feb 2025 21:35:46 +0300 Subject: [PATCH 45/46] try other request & some cleaning --- .github/workflows/labeler-approve.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 77eedafa2173..2229ad1a5e9e 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -4,12 +4,13 @@ on: pull_request_review: types: [submitted] +permissions: write-all + jobs: remove_label: runs-on: ubuntu-latest if: github.event.review.state == 'approved' steps: - - uses: actions/checkout@v4 - name: check all revs id: check_approvals uses: actions/github-script@v7 @@ -37,7 +38,7 @@ jobs: for (const label of labelsToRemove) { if (currentLabels.includes(label)) { - await github.rest.issues.removeLabel({ + await github.request("DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}", { owner: context.repo.owner, repo: context.repo.repo, issue_number: context.payload.pull_request.number, @@ -47,7 +48,3 @@ jobs: } env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: rm label 2 - if: steps.check_approvals.outputs.result == 'true' - run: | - curl -L -X DELETE -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/SerbiaStrong-220/space-station-14/issues/${{github.event.pull_request.number}}/labels/'Status: Needs Review' From 824101634e12e3f9cdd17715ab5ae2fe282cd79d Mon Sep 17 00:00:00 2001 From: UrPrice Date: Sat, 22 Feb 2025 21:57:49 +0300 Subject: [PATCH 46/46] more types Approver labeler --- .github/workflows/labeler-approve.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/labeler-approve.yml b/.github/workflows/labeler-approve.yml index 2229ad1a5e9e..b310781e0fa8 100644 --- a/.github/workflows/labeler-approve.yml +++ b/.github/workflows/labeler-approve.yml @@ -2,7 +2,7 @@ on: pull_request_review: - types: [submitted] + types: [submitted, edited, dismissed] permissions: write-all