Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream merge 8 2 2024 #54

Closed
wants to merge 113 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
e9bd710
Restore HoP As A Functional Job (#576)
VMSolidus Jul 22, 2024
a4424f6
Automatic Changelog Update (#576)
SimpleStation14 Jul 22, 2024
6b74938
Fix Subfloors For Diggable Diles (#577)
VMSolidus Jul 22, 2024
9732459
Automatic Changelog Update (#577)
SimpleStation14 Jul 22, 2024
2fc7725
Update CPRSystem.cs
VMSolidus Jul 22, 2024
ae4c6a4
Update DefibrillatorSystem.cs
VMSolidus Jul 22, 2024
fe84704
Update drinks.yml (#578)
VMSolidus Jul 22, 2024
cb8a2b2
Carrying System Refactor
VMSolidus Jul 22, 2024
972c4ad
Make a mistake in the order causing LIGHTER characters to be harder t…
VMSolidus Jul 22, 2024
cb27d72
Small change to variable name
VMSolidus Jul 22, 2024
cf0498e
Refactor FabricateCandySystem Into Its Generic Equivalent (#566)
Mnemotechnician Jul 23, 2024
72b0fd2
Fix Loadout and Trait Job Playtime Requirements (#584)
DEATHB4DEFEAT Jul 23, 2024
2ac6ec5
Automatic Changelog Update (#584)
SimpleStation14 Jul 23, 2024
527acd8
Fix FalseAlarmRule (#587)
Mnemotechnician Jul 24, 2024
6afac54
Automatic Changelog Update (#587)
SimpleStation14 Jul 24, 2024
ad7fd13
Update Contests System (#583)
VMSolidus Jul 24, 2024
b2e97ad
Merge branch 'master' into Carrying-System-Refactor
VMSolidus Jul 24, 2024
57adf2a
Update Carrying System to New Mass Contests
VMSolidus Jul 24, 2024
4a8b885
Include Stamina Contest
VMSolidus Jul 24, 2024
c9b9e85
Update CarryingSystem.cs
VMSolidus Jul 24, 2024
8751ca3
Update CarryingSystem.cs
VMSolidus Jul 24, 2024
db28ee6
Update CarryingSystem.cs
VMSolidus Jul 24, 2024
1ef3a41
Update CarryingSystem.cs
VMSolidus Jul 24, 2024
62a671f
Update CarryingSystem.cs
VMSolidus Jul 24, 2024
a5c515f
Fix Editor Dummy Always Being Human (#582)
DEATHB4DEFEAT Jul 24, 2024
c42e025
Automatic Changelog Update (#582)
SimpleStation14 Jul 24, 2024
224f74d
Event Rebalance (#581)
Mnemotechnician Jul 24, 2024
aca1132
Automatic Changelog Update (#581)
SimpleStation14 Jul 24, 2024
78f0a79
Social Anxiety Trait Renamed (#591)
CilliePaint Jul 25, 2024
bffc876
Prevent Instant Unequip of Clothing (#594)
Mnemotechnician Jul 25, 2024
7d1b23f
Random Announcer Fixes (#557)
DEATHB4DEFEAT Jul 26, 2024
634e933
Automatic Changelog Update (#557)
SimpleStation14 Jul 26, 2024
ec76fb9
Fix Talking Across Docked Grids (#593)
VMSolidus Jul 26, 2024
2ec1a03
Automatic Changelog Update (#593)
SimpleStation14 Jul 26, 2024
92dcd72
Refactor Sign Languages and Language Markers (#575)
Mnemotechnician Jul 26, 2024
7a8a0ad
Fix Multiple Species Requirements (#595)
DEATHB4DEFEAT Jul 26, 2024
910b4c3
Refactor Ramping Event Scheduler (#592)
VMSolidus Jul 27, 2024
c505552
Automatic Changelog Update (#592)
SimpleStation14 Jul 27, 2024
143b1d5
Fix Script Folder in Readme for Linux (#598)
Fansana Jul 27, 2024
c92ea10
Update Credits (#602)
github-actions[bot] Jul 28, 2024
305d585
Melee Light Refactoring
VMSolidus Jul 28, 2024
fe3e9e8
Cleaning up deprecated VV usage and datafield names
VMSolidus Jul 28, 2024
c6cd32b
More factoring
VMSolidus Jul 28, 2024
5a9259f
Update MeleeWeaponSystem.cs
VMSolidus Jul 28, 2024
2160377
Fix linter
VMSolidus Jul 28, 2024
a0d7f7d
Box Retexture (#597)
CilliePaint Jul 29, 2024
4b9c598
Automatic Changelog Update (#597)
SimpleStation14 Jul 29, 2024
faa239a
Fix 125 Toolshed Commands Being Unusable for Anyone without +HOST (#572)
Mnemotechnician Jul 29, 2024
41a5e8e
Automatic Changelog Update (#572)
SimpleStation14 Jul 29, 2024
a9e28ee
Radiation Doesn't Prevent DoAfters (#606)
VMSolidus Jul 29, 2024
7c5625b
Automatic Changelog Update (#606)
SimpleStation14 Jul 29, 2024
f149b25
replace cvar with component variable
VMSolidus Jul 29, 2024
d0cebd4
Update MeleeWeaponSystem.cs
VMSolidus Jul 29, 2024
e5088a1
9 New Physical traits
VMSolidus Jul 29, 2024
4ea187e
Update MeleeWeaponComponent.cs
VMSolidus Jul 29, 2024
2fbece4
Update TraitStatModifierSystem.cs
VMSolidus Jul 29, 2024
54c119e
Make Jobs & Antags Use CharacterRequirements (#596)
DEATHB4DEFEAT Jul 29, 2024
56d039c
Add Cybernetic Limb Markings (#613)
angelofallars Jul 30, 2024
055ad75
Automatic Changelog Update (#613)
SimpleStation14 Jul 30, 2024
08dde02
Add Makeup (#614)
angelofallars Jul 30, 2024
b744818
Automatic Changelog Update (#614)
SimpleStation14 Jul 30, 2024
29cb1b0
Hotfix Late Joins (#612)
VMSolidus Jul 31, 2024
d38c7d4
Hotfix Playtime Requirements (#621)
Mnemotechnician Jul 31, 2024
9527936
Remove Cargo Pallet From Request Console (#626)
Tmanzxd Jul 31, 2024
3a9c337
Use Correct Changelog Name (#627)
angelofallars Jul 31, 2024
d39c990
Fix Sound Params (#624)
VMSolidus Jul 31, 2024
5f73a5a
Automatic Changelog Update (#624)
SimpleStation14 Jul 31, 2024
c0114c0
Lasers Have No Recoil (#603)
VMSolidus Jul 31, 2024
8a3abcb
Automatic Changelog Update (#603)
SimpleStation14 Jul 31, 2024
fa2abfa
Fix the Uncategorized Category Not Being Hidden (#628)
DEATHB4DEFEAT Jul 31, 2024
5335dce
Automatic Changelog Update (#628)
SimpleStation14 Jul 31, 2024
b15d096
Minor Language Fixes (#618)
Mnemotechnician Jul 31, 2024
80eb456
Comms Console Announcer Fixes (#610)
VMSolidus Jul 31, 2024
3da588f
Automatic Changelog Update (#618)
SimpleStation14 Jul 31, 2024
6d1ae15
More Loadout Items: Wave 2 (#616)
angelofallars Aug 1, 2024
b3c3647
Automatic Changelog Update (#616)
SimpleStation14 Aug 1, 2024
7fb089d
Replace and Fix MedHud Icons (#631)
Tmanzxd Aug 1, 2024
5f2cae0
Manual Removal of easy_pry.yml (#632)
Tmanzxd Aug 1, 2024
00a74a2
Revert "Mirror: Restrict Door Remotes to only Being Able to Manipulat…
stellar-novas Aug 1, 2024
ac2fc06
Invert the Running/Walking States (#485)
DEATHB4DEFEAT Aug 1, 2024
a6237f3
Automatic Changelog Update (#485)
SimpleStation14 Aug 1, 2024
94098c6
Move Survival Boxes To Loadouts (#634)
VMSolidus Aug 1, 2024
11524d8
Automatic Changelog Update (#634)
SimpleStation14 Aug 1, 2024
dfdae62
Make Boxes Not Useless (#635)
VMSolidus Aug 1, 2024
437ac5a
Automatic Changelog Update (#635)
SimpleStation14 Aug 1, 2024
6bc8b60
"Buff" Vision Traits (#636)
VMSolidus Aug 1, 2024
0d1c931
Automatic Changelog Update (#636)
SimpleStation14 Aug 1, 2024
c96cfcc
More Loadout Items: Wave 3 (#633)
angelofallars Aug 1, 2024
adafe4a
Automatic Changelog Update (#633)
SimpleStation14 Aug 1, 2024
c4e53fd
Update vending.yml
VMSolidus Aug 1, 2024
e84f6c7
Update vendingdrinks.yml
VMSolidus Aug 1, 2024
1481146
Vulpkanin Tail Wagging (#588)
FoxxoTrystan Aug 1, 2024
8ccbf7e
Automatic Changelog Update (#588)
SimpleStation14 Aug 1, 2024
91c5d2d
Merge remote-tracking branch 'EE-Master/LamiaSystem' into upstream-me…
VMSolidus Aug 2, 2024
b067e17
aaaaaaaaa
VMSolidus Aug 2, 2024
5f37d06
Fixes from latest feedback
VMSolidus Jul 15, 2024
f8b8a0f
No idea how the hell potentialpsychics came back
VMSolidus Jul 20, 2024
1faea1c
Update xeno.yml
VMSolidus Jul 20, 2024
6662589
Update PsionicAbilitiesSystem.cs
VMSolidus Jul 25, 2024
75c75b2
Merge remote-tracking branch 'EE-Personal/Additional-Contests-Impleme…
VMSolidus Aug 2, 2024
7c87bc6
Merge remote-tracking branch 'EE-Personal/NyanoCombat-2,-Part-3-Physi…
VMSolidus Aug 2, 2024
977df33
Merge remote-tracking branch 'EE-Personal/Carrying-System-Refactor' i…
VMSolidus Aug 2, 2024
669dbee
Merge remote-tracking branch 'EE-Personal/Add-Sol-Federation-Vendors-…
VMSolidus Aug 2, 2024
e8113c9
Fix contests
VMSolidus Aug 2, 2024
90addd3
Merge remote-tracking branch 'EE-Personal/CPR-Remake' into Upstream-M…
VMSolidus Aug 2, 2024
39d89b1
womp
Jul 1, 2024
ec10f89
Update SupermatterSystem.cs
VMSolidus Jul 22, 2024
cad531f
Cleanup Deprecated VV Options
VMSolidus Jul 30, 2024
cc34952
Update SupermatterSystem.cs
VMSolidus Jul 30, 2024
b6f0344
Update SupermatterFoodComponent.cs
VMSolidus Jul 30, 2024
e117c79
Update SupermatterComponent.cs
VMSolidus Jul 31, 2024
45dc2de
Add job whitelist system (#28085)
VMSolidus Jul 31, 2024
3fa61be
This took way too long
VMSolidus Aug 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ indent_style = space
tab_width = 4

# New line preferences
#end_of_line = crlf
end_of_line = crlf:suggestion
insert_final_newline = true
trim_trailing_whitespace = true

Expand Down Expand Up @@ -104,6 +104,7 @@ csharp_preferred_modifier_order = public, private, protected, internal, new, abs

# 'using' directive preferences
csharp_using_directive_placement = outside_namespace:silent
csharp_style_namespace_declarations = file_scoped:suggestion

#### C# Formatting Rules ####

Expand Down
8 changes: 7 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
{
"omnisharp.analyzeOpenDocumentsOnly": true,
"dotnet.defaultSolution": "SpaceStation14.sln"
"dotnet.defaultSolution": "SpaceStation14.sln",
"json.schemas": [
{
"fileMatch": [ "**/meta.json" ],
"url": "https://raw.githubusercontent.com/Simple-Station/Einstein-Engines/master/.github/rsi-schema.json"
}
]
}
91 changes: 52 additions & 39 deletions Content.Client/Access/AccessOverlay.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,73 +9,86 @@ namespace Content.Client.Access;

public sealed class AccessOverlay : Overlay
{
private const string TextFontPath = "/Fonts/NotoSans/NotoSans-Regular.ttf";
private const int TextFontSize = 12;

private readonly IEntityManager _entityManager;
private readonly EntityLookupSystem _lookup;
private readonly SharedTransformSystem _xform;
private readonly SharedTransformSystem _transformSystem;
private readonly Font _font;

public override OverlaySpace Space => OverlaySpace.ScreenSpace;

public AccessOverlay(IEntityManager entManager, IResourceCache cache, EntityLookupSystem lookup, SharedTransformSystem xform)
public AccessOverlay(IEntityManager entityManager, IResourceCache resourceCache, SharedTransformSystem transformSystem)
{
_entityManager = entManager;
_lookup = lookup;
_xform = xform;

_font = cache.GetFont("/Fonts/NotoSans/NotoSans-Regular.ttf", 12);
_entityManager = entityManager;
_transformSystem = transformSystem;
_font = resourceCache.GetFont(TextFontPath, TextFontSize);
}

protected override void Draw(in OverlayDrawArgs args)
{
if (args.ViewportControl == null)
return;

var readerQuery = _entityManager.GetEntityQuery<AccessReaderComponent>();
var xformQuery = _entityManager.GetEntityQuery<TransformComponent>();

foreach (var ent in _lookup.GetEntitiesIntersecting(args.MapId, args.WorldAABB,
LookupFlags.Static | LookupFlags.Approximate))
var textBuffer = new StringBuilder();
var query = _entityManager.EntityQueryEnumerator<AccessReaderComponent, TransformComponent>();
while (query.MoveNext(out var uid, out var accessReader, out var transform))
{
if (!readerQuery.TryGetComponent(ent, out var reader) ||
!xformQuery.TryGetComponent(ent, out var xform))
textBuffer.Clear();

var entityName = _entityManager.ToPrettyString(uid);
textBuffer.AppendLine(entityName.Prototype);
textBuffer.Append("UID: ");
textBuffer.Append(entityName.Uid.Id);
textBuffer.Append(", NUID: ");
textBuffer.Append(entityName.Nuid.Id);
textBuffer.AppendLine();

if (!accessReader.Enabled)
{
textBuffer.AppendLine("-Disabled");
continue;
}

var text = new StringBuilder();
var index = 0;
var a = $"{_entityManager.ToPrettyString(ent)}";
text.Append(a);

foreach (var list in reader.AccessLists)
if (accessReader.AccessLists.Count > 0)
{
a = $"Tag {index}";
text.AppendLine(a);

foreach (var entry in list)
var groupNumber = 0;
foreach (var accessList in accessReader.AccessLists)
{
a = $"- {entry}";
text.AppendLine(a);
groupNumber++;
foreach (var entry in accessList)
{
textBuffer.Append("+Set ");
textBuffer.Append(groupNumber);
textBuffer.Append(": ");
textBuffer.Append(entry.Id);
textBuffer.AppendLine();
}
}

index++;
}

string textStr;

if (text.Length >= 2)
else
{
textStr = text.ToString();
textStr = textStr[..^2];
textBuffer.AppendLine("+Unrestricted");
}
else

foreach (var key in accessReader.AccessKeys)
{
textStr = "";
textBuffer.Append("+Key ");
textBuffer.Append(key.OriginStation);
textBuffer.Append(": ");
textBuffer.Append(key.Id);
textBuffer.AppendLine();
}

var screenPos = args.ViewportControl.WorldToScreen(_xform.GetWorldPosition(xform));
foreach (var tag in accessReader.DenyTags)
{
textBuffer.Append("-Tag ");
textBuffer.AppendLine(tag.Id);
}

args.ScreenHandle.DrawString(_font, screenPos, textStr, Color.Gold);
var accessInfoText = textBuffer.ToString();
var screenPos = args.ViewportControl.WorldToScreen(_transformSystem.GetWorldPosition(transform));
args.ScreenHandle.DrawString(_font, screenPos, accessInfoText, Color.Gold);
}
}
}
15 changes: 11 additions & 4 deletions Content.Client/Access/Commands/ShowAccessReadersCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,16 @@ namespace Content.Client.Access.Commands;
public sealed class ShowAccessReadersCommand : IConsoleCommand
{
public string Command => "showaccessreaders";
public string Description => "Shows all access readers in the viewport";
public string Help => $"{Command}";

public string Description => "Toggles showing access reader permissions on the map";
public string Help => """
Overlay Info:
-Disabled | The access reader is disabled
+Unrestricted | The access reader has no restrictions
+Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set)
+Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed
-Tag [Tag Name] | A tag that is not allowed (takes priority over other allows)
""";
public void Execute(IConsoleShell shell, string argStr, string[] args)
{
var collection = IoCManager.Instance;
Expand All @@ -26,10 +34,9 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)

var entManager = collection.Resolve<IEntityManager>();
var cache = collection.Resolve<IResourceCache>();
var lookup = entManager.System<EntityLookupSystem>();
var xform = entManager.System<SharedTransformSystem>();

overlay.AddOverlay(new AccessOverlay(entManager, cache, lookup, xform));
overlay.AddOverlay(new AccessOverlay(entManager, cache, xform));
shell.WriteLine($"Set access reader debug overlay to true");
}
}
4 changes: 4 additions & 0 deletions Content.Client/Access/UI/AccessLevelControl.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<GridContainer xmlns="https://spacestation14.io"
Columns="5"
HorizontalAlignment="Center">
</GridContainer>
52 changes: 52 additions & 0 deletions Content.Client/Access/UI/AccessLevelControl.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using System.Linq;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using Content.Shared.Access;
using Content.Shared.Access.Systems;

namespace Content.Client.Access.UI;

[GenerateTypedNameReferences]
public sealed partial class AccessLevelControl : GridContainer
{
public readonly Dictionary<ProtoId<AccessLevelPrototype>, Button> ButtonsList = new();

public AccessLevelControl()
{
RobustXamlLoader.Load(this);
}

public void Populate(List<ProtoId<AccessLevelPrototype>> accessLevels, IPrototypeManager prototypeManager)
{
foreach (var access in accessLevels)
{
if (!prototypeManager.TryIndex(access, out var accessLevel))
{
Logger.Error($"Unable to find accesslevel for {access}");
continue;
}

var newButton = new Button
{
Text = accessLevel.GetAccessLevelName(),
ToggleMode = true,
};
AddChild(newButton);
ButtonsList.Add(accessLevel.ID, newButton);
}
}

public void UpdateState(
List<ProtoId<AccessLevelPrototype>> pressedList,
List<ProtoId<AccessLevelPrototype>>? enabledList = null)
{
foreach (var (accessName, button) in ButtonsList)
{
button.Pressed = pressedList.Contains(accessName);
button.Disabled = !(enabledList?.Contains(accessName) ?? true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ protected override void UpdateState(BoundUserInterfaceState state)
_window?.UpdateState(castState);
}

public void SubmitData(List<string> newAccessList)
public void SubmitData(List<ProtoId<AccessLevelPrototype>> newAccessList)
{
SendMessage(new WriteToTargetAccessReaderIdMessage(newAccessList));
}
Expand Down
17 changes: 4 additions & 13 deletions Content.Client/Access/UI/AccessOverriderWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ public sealed partial class AccessOverriderWindow : DefaultWindow
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;

private readonly ISawmill _logMill = default!;
private readonly AccessOverriderBoundUserInterface _owner;
private readonly Dictionary<string, Button> _accessButtons = new();

Expand All @@ -25,21 +24,21 @@ public AccessOverriderWindow(AccessOverriderBoundUserInterface owner, IPrototype
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_logMill = _logManager.GetSawmill(SharedAccessOverriderSystem.Sawmill);
var logMill = _logManager.GetSawmill(SharedAccessOverriderSystem.Sawmill);

_owner = owner;

foreach (var access in accessLevels)
{
if (!prototypeManager.TryIndex(access, out var accessLevel))
{
_logMill.Error($"Unable to find accesslevel for {access}");
logMill.Error($"Unable to find accesslevel for {access}");
continue;
}

var newButton = new Button
{
Text = GetAccessLevelName(accessLevel),
Text = accessLevel.GetAccessLevelName(),
ToggleMode = true,
};

Expand All @@ -49,14 +48,6 @@ public AccessOverriderWindow(AccessOverriderBoundUserInterface owner, IPrototype
}
}

private static string GetAccessLevelName(AccessLevelPrototype prototype)
{
if (prototype.Name is { } name)
return Loc.GetString(name);

return prototype.ID;
}

public void UpdateState(AccessOverriderBoundUserInterfaceState state)
{
PrivilegedIdLabel.Text = state.PrivilegedIdName;
Expand Down Expand Up @@ -105,7 +96,7 @@ private void SubmitData()
_owner.SubmitData(

// Iterate over the buttons dictionary, filter by `Pressed`, only get key from the key/value pair
_accessButtons.Where(x => x.Value.Pressed).Select(x => x.Key).ToList());
_accessButtons.Where(x => x.Value.Pressed).Select(x => new ProtoId<AccessLevelPrototype>(x.Key)).ToList());
}
}
}
4 changes: 2 additions & 2 deletions Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Content.Shared.Access;
using Content.Shared.Access.Components;
using Content.Shared.Access;
using Content.Shared.Access.Systems;
using Content.Shared.Containers.ItemSlots;
using Content.Shared.CrewManifest;
Expand Down Expand Up @@ -28,7 +29,6 @@ protected override void Open()
if (EntMan.TryGetComponent<IdCardConsoleComponent>(Owner, out var idCard))
{
accessLevels = idCard.AccessLevels;
accessLevels.Sort();
}
else
{
Expand Down Expand Up @@ -65,7 +65,7 @@ protected override void UpdateState(BoundUserInterfaceState state)
_window?.UpdateState(castState);
}

public void SubmitData(string newFullName, string newJobTitle, List<string> newAccessList, string newJobPrototype)
public void SubmitData(string newFullName, string newJobTitle, List<ProtoId<AccessLevelPrototype>> newAccessList, string newJobPrototype)
{
if (newFullName.Length > MaxFullNameLength)
newFullName = newFullName[..MaxFullNameLength];
Expand Down
6 changes: 1 addition & 5 deletions Content.Client/Access/UI/IdCardConsoleWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@
<Label Text="{Loc 'id-card-console-window-job-selection-label'}" />
<OptionButton Name="JobPresetOptionButton" />
</GridContainer>
<GridContainer Name="AccessLevelGrid" Columns="5" HorizontalAlignment="Center">

<!-- Access level buttons are added here by the C# code -->

</GridContainer>
<Control Name="AccessLevelControlContainer" />
</BoxContainer>
</DefaultWindow>
Loading
Loading