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

Pirate Bounties #1513

Merged
merged 94 commits into from
Jul 24, 2024
Merged
Show file tree
Hide file tree
Changes from 83 commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
b8d7dd7
Pirate Bounties
Salvantrix Jun 13, 2024
e59b30a
Changed Components to ID's
Salvantrix Jun 14, 2024
948622b
added additional bounties
Salvantrix Jun 14, 2024
b6007a3
Fixed ID names
Salvantrix Jun 14, 2024
3d2c3d0
ID Whitelist, move pirate bounties to _NF folders
Jun 16, 2024
83bf58f
Balance Pass
Salvantrix Jun 19, 2024
ccf72b4
Pirate bounty components & systems, ROUGH DRAFT.
whatston3 Jun 19, 2024
bff0941
Pirate bounty/pallet console UI (ROUGH DRAFT
whatston3 Jun 19, 2024
fa3e393
Pirate UI (WIP, quarter-baked at best)
whatston3 Jun 19, 2024
22399e1
Pirate UI cleanup, first pass
whatston3 Jun 19, 2024
d185bd8
Merge branch 'master' of https://github.com/new-frontiers-14/frontier…
whatston3 Jul 16, 2024
25df953
Booty Crate Sprites
Salvantrix Jul 16, 2024
20b3408
Crate fix dumb
Salvantrix Jul 16, 2024
0a679c0
Merge remote-tracking branch 'origin/PIRATE-BOOTIES-UI-WIP' into PIRA…
whatston3 Jul 16, 2024
438817e
Merge remote-tracking branch 'salv/PIRATE-BOOTIES' into PIRATE-BOOTIES
whatston3 Jul 16, 2024
2777beb
Pirate vessels inherit from pirate vessel class
whatston3 Jul 16, 2024
1f829b0
Pirate bounty consoles and pad
Salvantrix Jul 16, 2024
16cd694
Merge branch 'PIRATE-BOOTIES' of https://github.com/Salvantrix/fronti…
Salvantrix Jul 16, 2024
2755142
FIX
Salvantrix Jul 16, 2024
296b2b0
Should work -- Console FTL's
Salvantrix Jul 16, 2024
02a42c7
Sector service POC, pirate bounty service
whatston3 Jul 16, 2024
07d0292
Pirate bounty system: use sector service
whatston3 Jul 16, 2024
c9994ab
SectorServicePrototype: fix namespace includes
whatston3 Jul 16, 2024
e7837dc
SectorServicePrototype: yet more namespace include
whatston3 Jul 16, 2024
9888783
namespace includes, pt 3
whatston3 Jul 16, 2024
11053c2
CargoSystem: fix obsolete code
whatston3 Jul 16, 2024
f417106
Add pirate bounty and redemption WIP computers
whatston3 Jul 16, 2024
e7b1c94
Pirate bounties: fix whitelist, add blacklist
whatston3 Jul 16, 2024
da700fc
SectorServicePrototype: add serializable attribute
whatston3 Jul 16, 2024
9138ded
SectorServicePrototype: default name
whatston3 Jul 16, 2024
0917c98
SectorServicePrototype to shared
whatston3 Jul 16, 2024
092918f
YAML linter fixes, no service serialization
whatston3 Jul 16, 2024
3c55d8a
ProtoIdWhitelist: use List, adjust bounty values
whatston3 Jul 16, 2024
d3cefc5
PirateBounty: use existing Bounty name ID group
whatston3 Jul 17, 2024
e91b76f
global service: station component, bounty system
whatston3 Jul 17, 2024
8477f8f
Redundant functions, generics
whatston3 Jul 17, 2024
b4c5485
SectorServiceSystem: interface woes
whatston3 Jul 17, 2024
2c4a1b8
PirateBounty component work
whatston3 Jul 17, 2024
c6ce482
PirateBounty: more sector service fixes
whatston3 Jul 17, 2024
c60201e
yet more pirate bounty & sector service system
whatston3 Jul 17, 2024
82066f6
SectorService: revert to GetServiceEntity for now
whatston3 Jul 17, 2024
bb2211e
CargoSystem.PirateBounty.cs: restore entity UIDs
whatston3 Jul 17, 2024
0879a1d
partial problems require partial components
whatston3 Jul 17, 2024
b10e601
Remove Cargo UI key, add a few debug prints
whatston3 Jul 17, 2024
184e713
pirate bounty console and pallet FTL
whatston3 Jul 17, 2024
1fa6cd2
Pirate bounty console UI
whatston3 Jul 17, 2024
8cb5758
PirateBounty: compilation fixes
whatston3 Jul 17, 2024
a68c652
PirateBounty
whatston3 Jul 17, 2024
a5736fd
Merge branch 'PIRATE-BOOTIES-server-and-client' into PIRATE-BOOTIES
whatston3 Jul 17, 2024
895780f
Summon chest WIP
whatston3 Jul 17, 2024
97a01cc
More pirate bounty stuff
whatston3 Jul 17, 2024
2fa0a57
PirateBountyEntry: access button rewrite
whatston3 Jul 17, 2024
f40e954
Merge branch 'master' into PIRATE-BOOTIES
Salvantrix Jul 18, 2024
6f50486
cancel vs. skip, spawning fixes
whatston3 Jul 19, 2024
81bc01e
Undupe pirate-pallet strings
whatston3 Jul 19, 2024
1b41a26
30 minute cancel
whatston3 Jul 19, 2024
2fe347d
pirate bounty chest and reminder descriptions
whatston3 Jul 20, 2024
28f08b9
Rough pirate contraband console
whatston3 Jul 20, 2024
4d3fa2f
Pirate contraband exchange
whatston3 Jul 20, 2024
269012b
Add pirate appraisal tool
whatston3 Jul 21, 2024
87db08f
"black market"
whatston3 Jul 21, 2024
80dfd23
Half of a bounty redemption algo
whatston3 Jul 21, 2024
c9e57c4
Pirate bounty redemption, part 2
whatston3 Jul 22, 2024
1184b24
Pirate bounty redemption: first rough version?
whatston3 Jul 22, 2024
d2c5a1a
closer to compilation
whatston3 Jul 22, 2024
6b4d2e6
Compilation fixes
whatston3 Jul 22, 2024
8e660ce
Bounty redemption UI
whatston3 Jul 22, 2024
599b533
Pirate bounty redemption fixes
whatston3 Jul 22, 2024
775a495
Set up label on pirate bounty, fix whitelist check
whatston3 Jul 22, 2024
297cfec
Id whitelist
whatston3 Jul 22, 2024
994429d
ID whitelist fixes
whatston3 Jul 22, 2024
752f931
Fix crate IDs used for lookup
whatston3 Jul 22, 2024
d2a9bc5
fix bounty whitelisting, bounty chests, prices
whatston3 Jul 22, 2024
da6c212
Fix up bounties, fluent entries for bounties
whatston3 Jul 22, 2024
55c9429
Merge branch 'PIRATE-BOOTIES-server-and-client' into PIRATE-BOOTIES
whatston3 Jul 22, 2024
fdeb617
Merge branch 'master' into PIRATE-BOOTIES
Salvantrix Jul 22, 2024
c581137
Bah
Salvantrix Jul 22, 2024
6d78762
Update cove.yml
dvir001 Jul 22, 2024
489dc09
pirate bounty consoles, unshaded pad, cove pads
whatston3 Jul 23, 2024
0b13f84
piratebounty.png: fix one bad pixel
whatston3 Jul 23, 2024
e482127
Revert the mark of the beast
whatston3 Jul 23, 2024
9a20027
humility
whatston3 Jul 23, 2024
e930597
Pirate Bounty cleanup
whatston3 Jul 23, 2024
88e0120
Merge branch 'master' into PIRATE-BOOTIES
dvir001 Jul 23, 2024
4d3db72
cleanup contraband.png pixels
whatston3 Jul 23, 2024
c646d3d
Merge branch 'PIRATE-BOOTIES-polish' into PIRATE-BOOTIES
whatston3 Jul 23, 2024
3723dfb
fix pirate logo
whatston3 Jul 23, 2024
b033bcf
Polish: noises, UI updates & strings
whatston3 Jul 23, 2024
bd62bb3
Pirate Bounty: redemption text
whatston3 Jul 23, 2024
cfc3dc7
Fix spawn chest sound
whatston3 Jul 23, 2024
d7e8df9
Merge branch 'master' into PIRATE-BOOTIES
dvir001 Jul 24, 2024
ca2d372
Update cove.yml
dvir001 Jul 24, 2024
ed96c21
Update cove.yml
dvir001 Jul 24, 2024
0bc1c6d
Update pirate.yml
dvir001 Jul 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Content.Client/Stylesheets/StyleNano.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1423,6 +1423,10 @@ public StyleNano(IResourceCache resCache) : base(resCache)
.Prop(TextureRect.StylePropertyTexture, resCache.GetTexture("/Textures/Interface/Nano/ntlogo.svg.png"))
.Prop(Control.StylePropertyModulateSelf, Color.FromHex("#757575")),

Element<TextureRect>().Class("PirateLogoDark") // Frontier
.Prop(TextureRect.StylePropertyTexture, resCache.GetTexture("/Textures/Interface/Nano/piratelogo.svg.png")) // Frontier
.Prop(Control.StylePropertyModulateSelf, Color.FromHex("#757575")), // Frontier
dvir001 marked this conversation as resolved.
Show resolved Hide resolved

Element<Label>().Class("WindowFooterText")
.Prop(Label.StylePropertyFont, notoSans8)
.Prop(Label.StylePropertyFontColor, Color.FromHex("#757575")),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Content.Client._NF.Contraband.UI;
using Content.Shared._NF.Contraband.BUI;
using Content.Shared._NF.Contraband.Components;
using Content.Shared._NF.Contraband.Events;
using Robust.Shared.GameObjects;
using Robust.Shared.Utility;

namespace Content.Client._NF.Contraband.BUI;
Expand All @@ -10,16 +12,21 @@ public sealed class ContrabandPalletConsoleBoundUserInterface : BoundUserInterfa
[ViewVariables]
private ContrabandPalletMenu? _menu;

[ViewVariables]
private string _locPrefix = string.Empty;

public ContrabandPalletConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
if (EntMan.TryGetComponent<ContrabandPalletConsoleComponent>(owner, out var console))
_locPrefix = console.LocStringPrefix ?? string.Empty;
}

protected override void Open()
{
base.Open();
var disclaimer = new FormattedMessage();
disclaimer.AddText(Loc.GetString($"contraband-pallet-disclaimer"));
_menu = new ContrabandPalletMenu();
disclaimer.AddText(Loc.GetString($"{_locPrefix}contraband-pallet-disclaimer"));
_menu = new ContrabandPalletMenu(_locPrefix);
_menu.AppraiseRequested += OnAppraisal;
_menu.SellRequested += OnSell;
_menu.OnClose += Close;
Expand Down
4 changes: 2 additions & 2 deletions Content.Client/_NF/Contraband/UI/ContrabandPalletMenu.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
MinSize="300 196">
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Horizontal" SetHeight="24">
<Label Text="{Loc 'contraband-pallet-menu-appraisal-label'}"
<Label Name="AppraisalLabelLeft" Text="{Loc 'contraband-pallet-menu-appraisal-label'}"
StyleClasses="LabelKeyText" />
<Label Name="AppraisalLabel"
Text="{Loc 'contraband-pallet-menu-no-goods-text'}" />
</BoxContainer>
<BoxContainer Orientation="Horizontal" SetHeight="24">
<Label Text="{Loc 'contraband-pallet-menu-count-label'}"
<Label Name="CountLabelLeft" Text="{Loc 'contraband-pallet-menu-count-label'}"
StyleClasses="LabelKeyText" />
<Label Name="CountLabel"
Text="{Loc 'contraband-pallet-menu-no-goods-text'}" />
Expand Down
21 changes: 18 additions & 3 deletions Content.Client/_NF/Contraband/UI/ContrabandPalletMenu.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,32 @@ public sealed partial class ContrabandPalletMenu : FancyWindow
public Action? SellRequested;
public Action? AppraiseRequested;

public ContrabandPalletMenu()
private string _locPrefix = string.Empty;

public ContrabandPalletMenu(string locPrefix)
{
RobustXamlLoader.Load(this);
SellButton.OnPressed += OnSellPressed;
AppraiseButton.OnPressed += OnAppraisePressed;
Title = Loc.GetString("contraband-pallet-console-menu-title");

_locPrefix = locPrefix ?? string.Empty;

Title = Loc.GetString($"{_locPrefix}contraband-pallet-console-menu-title");

if (!string.IsNullOrEmpty(_locPrefix))
{
AppraisalLabelLeft.Text = Loc.GetString($"{_locPrefix}contraband-pallet-menu-appraisal-label");
AppraisalLabel.Text = Loc.GetString($"{_locPrefix}contraband-pallet-menu-no-goods-text");
CountLabelLeft.Text = Loc.GetString($"{_locPrefix}contraband-pallet-menu-count-label");
CountLabel.Text = Loc.GetString($"{_locPrefix}contraband-pallet-menu-no-goods-text");
AppraiseButton.Text = Loc.GetString($"{_locPrefix}contraband-pallet-appraise-button");
SellButton.Text = Loc.GetString($"{_locPrefix}contraband-pallet-sell-button");
}
}

public void SetAppraisal(int amount)
{
AppraisalLabel.Text = Loc.GetString("contraband-console-menu-points-amount", ("amount", amount.ToString()));
AppraisalLabel.Text = Loc.GetString($"{_locPrefix}contraband-console-menu-points-amount", ("amount", amount.ToString()));
}

public void SetCount(int count)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using Content.Client._NF.Pirate.UI;
using Content.Shared._NF.Pirate.Components;
using JetBrains.Annotations;

namespace Content.Client._NF.Pirate.BUI;

[UsedImplicitly]
public sealed class PirateBountyConsoleBoundUserInterface : BoundUserInterface
{
[ViewVariables]
private PirateBountyMenu? _menu;

public PirateBountyConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}

protected override void Open()
{
base.Open();

_menu = new();

_menu.OnClose += Close;

_menu.OnLabelButtonPressed += id =>
{
SendMessage(new PirateBountyAcceptMessage(id));
};

_menu.OnSkipButtonPressed += id =>
{
SendMessage(new PirateBountySkipMessage(id));
};

_menu.OpenCentered();
}

protected override void UpdateState(BoundUserInterfaceState message)
{
base.UpdateState(message);

if (message is not PirateBountyConsoleState state)
return;

_menu?.UpdateEntries(state.Bounties, state.UntilNextSkip);
}

protected override void Dispose(bool disposing)
{
base.Dispose(disposing);

if (!disposing)
return;

_menu?.Dispose();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using Content.Client._NF.Pirate.UI;
using Content.Shared._NF.Pirate.BUI;
using Content.Shared._NF.Pirate.Components;
using Content.Shared._NF.Pirate.Events;

namespace Content.Client._NF.Pirate.BUI;

public sealed class PirateBountyRedemptionConsoleBoundUserInterface : BoundUserInterface
{
[ViewVariables]
private PirateBountyRedemptionMenu? _menu;
[ViewVariables]
private EntityUid uid;

public PirateBountyRedemptionConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
if (EntMan.TryGetComponent<PirateBountyRedemptionConsoleComponent>(owner, out var console))
uid = owner;
}

protected override void Open()
{
base.Open();

_menu = new PirateBountyRedemptionMenu();
_menu.SellRequested += OnSell;
_menu.OnClose += Close;

_menu.OpenCentered();
}

protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
{
_menu?.Dispose();
}
}

private void OnSell()
{
SendMessage(new PirateBountyRedemptionMessage());
}

// TODO: remove this, nothing to update
protected override void UpdateState(BoundUserInterfaceState state)
{
base.UpdateState(state);

if (state is not PirateBountyRedemptionConsoleInterfaceState palletState)
return;
}
}
14 changes: 14 additions & 0 deletions Content.Client/_NF/Pirate/Systems/PirateSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using Content.Shared._NF.Pirate;
using Robust.Client.GameObjects;

namespace Content.Client._NF.Pirate.Systems;

public sealed partial class PirateSystem : SharedPirateSystem
{
[Dependency] private readonly AnimationPlayerSystem _player = default!;

public override void Initialize()
{
base.Initialize();
}
}
37 changes: 37 additions & 0 deletions Content.Client/_NF/Pirate/UI/PirateBountyEntry.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<BoxContainer xmlns="https://spacestation14.io"
xmlns:customControls="clr-namespace:Content.Client.Administration.UI.CustomControls"
Margin="10 10 10 0"
HorizontalExpand="True"
Visible="True">
<PanelContainer StyleClasses="AngleRect" HorizontalExpand="True">
<BoxContainer Orientation="Vertical"
HorizontalExpand="True">
<BoxContainer Orientation="Horizontal">
<BoxContainer Orientation="Vertical" HorizontalExpand="True">
<RichTextLabel Name="RewardLabel"/>
<RichTextLabel Name="ManifestLabel"/>
</BoxContainer>
<Control MinWidth="10"/>
<BoxContainer Orientation="Vertical" MinWidth="120">
<BoxContainer Orientation="Horizontal" MinWidth="120">
<Button Name="AcceptButton"
Text="{Loc 'pirate-bounty-console-accept-button-chest'}"
HorizontalExpand="False"
HorizontalAlignment="Right"
StyleClasses="OpenRight"/>
<Button Name="SkipButton"
Text="{Loc 'pirate-bounty-console-skip-button-text'}"
HorizontalExpand="False"
HorizontalAlignment="Right"
StyleClasses="OpenLeft"/>
</BoxContainer>
<RichTextLabel Name="IdLabel" HorizontalAlignment="Right" Margin="0 0 5 0"/>
</BoxContainer>
</BoxContainer>
<customControls:HSeparator Margin="5 10 5 10"/>
<BoxContainer>
<RichTextLabel Name="DescriptionLabel"/>
</BoxContainer>
</BoxContainer>
</PanelContainer>
</BoxContainer>
89 changes: 89 additions & 0 deletions Content.Client/_NF/Pirate/UI/PirateBountyEntry.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using Content.Client.Message;
using Content.Shared._NF.Pirate;
using Content.Shared._NF.Pirate.Prototypes;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Client.AutoGenerated;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;

namespace Content.Client._NF.Pirate.UI;

[GenerateTypedNameReferences]
public sealed partial class PirateBountyEntry : BoxContainer
{
[Dependency] private readonly IPrototypeManager _prototype = default!;

public Action? OnLabelButtonPressed;
public Action? OnSkipButtonPressed;

public TimeSpan EndTime;
public TimeSpan UntilNextSkip;

public bool Accepted;

public PirateBountyEntry(PirateBountyData bounty, TimeSpan untilNextSkip)
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);

UntilNextSkip = untilNextSkip;
Accepted = bounty.Accepted;

if (!_prototype.TryIndex<PirateBountyPrototype>(bounty.Bounty, out var bountyPrototype))
return;

if (bountyPrototype.SpawnChest)
AcceptButton.Label.Text = Loc.GetString("pirate-bounty-console-accept-button-chest");
else
AcceptButton.Label.Text = Loc.GetString("pirate-bounty-console-accept-button-label");

var items = new List<string>();
foreach (var entry in bountyPrototype.Entries)
{
items.Add(Loc.GetString("pirate-bounty-console-manifest-entry",
("amount", entry.Amount),
("item", Loc.GetString(entry.Name))));
}
ManifestLabel.SetMarkup(Loc.GetString("pirate-bounty-console-manifest-label", ("item", string.Join(", ", items))));
RewardLabel.SetMarkup(Loc.GetString("pirate-bounty-console-reward-label", ("reward", bountyPrototype.Reward)));
DescriptionLabel.SetMarkup(Loc.GetString("pirate-bounty-console-description-label", ("description", Loc.GetString(bountyPrototype.Description))));
IdLabel.SetMarkup(Loc.GetString("pirate-bounty-console-id-label", ("id", bounty.Id)));

AcceptButton.OnPressed += _ => OnLabelButtonPressed?.Invoke();
SkipButton.OnPressed += _ => OnSkipButtonPressed?.Invoke();
}

private void UpdateSkipButton(float deltaSeconds)
{
if (Accepted)
{
SkipButton.Label.Text = Loc.GetString("pirate-bounty-console-skip-button-accepted");
SkipButton.Disabled = false;
return;
}

UntilNextSkip -= TimeSpan.FromSeconds(deltaSeconds);
if (UntilNextSkip > TimeSpan.Zero)
{
SkipButton.Label.Text = UntilNextSkip.ToString("mm\\:ss");
SkipButton.Disabled = true;
return;
}

SkipButton.Label.Text = Loc.GetString("pirate-bounty-console-skip-button-text");
SkipButton.Disabled = false;
}

private void UpdateAcceptButton()
{
AcceptButton.Disabled = Accepted;
}

protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
UpdateSkipButton(args.DeltaSeconds);
UpdateAcceptButton(); // Ideally, shouldn't be run every frame.
}
}
37 changes: 37 additions & 0 deletions Content.Client/_NF/Pirate/UI/PirateBountyMenu.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<controls:FancyWindow xmlns="https://spacestation14.io"
xmlns:gfx="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
Title="{Loc 'pirate-bounty-console-menu-title'}"
SetSize="550 420"
MinSize="400 350">
<BoxContainer Orientation="Vertical"
VerticalExpand="True"
HorizontalExpand="True">
<PanelContainer VerticalExpand="True" HorizontalExpand="True" Margin="10">
<PanelContainer.PanelOverride>
<gfx:StyleBoxFlat BackgroundColor="#1B1B1E" />
</PanelContainer.PanelOverride>
<ScrollContainer HScrollEnabled="False"
HorizontalExpand="True"
VerticalExpand="True">
<BoxContainer Name="PirateBountyEntriesContainer"
Orientation="Vertical"
VerticalExpand="True"
HorizontalExpand="True">
</BoxContainer>
</ScrollContainer>
</PanelContainer>
<!-- Footer -->
<BoxContainer Orientation="Vertical">
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Orientation="Horizontal" Margin="10 2 5 0" VerticalAlignment="Bottom">
<Label Text="{Loc 'pirate-bounty-console-flavor-left'}" StyleClasses="WindowFooterText" />
<Label Text="{Loc 'pirate-bounty-console-flavor-right'}" StyleClasses="WindowFooterText"
HorizontalAlignment="Right" HorizontalExpand="True" Margin="0 0 5 0" />
<!-- TODO: Probably remove this vv -->
<TextureRect StyleClasses="PirateLogoDark" Stretch="KeepAspectCentered"
VerticalAlignment="Center" HorizontalAlignment="Right" SetSize="19 19"/>
</BoxContainer>
</BoxContainer>
</BoxContainer>
</controls:FancyWindow>
Loading
Loading