Skip to content

Интерфейс банкомата: десять последних операций, взломанность, номер ЮПИ#583

Open
dovacot wants to merge 3 commits into
Lua-Frontier:masterfrom
dovacot:QoL/ATM
Open

Интерфейс банкомата: десять последних операций, взломанность, номер ЮПИ#583
dovacot wants to merge 3 commits into
Lua-Frontier:masterfrom
dovacot:QoL/ATM

Conversation

@dovacot

@dovacot dovacot commented May 26, 2026

Copy link
Copy Markdown
Contributor

О пулл-реквесте

Улучшение интерфейса банкомата, показ 10 последних операций, взломан ли он (ЧР/Синдикат) и номера ЮПИ.

Обоснование / Баланс

Не меняет баланс.

Технические детали

Система банкомата была скопирована в отдельный класс и подправлена.
У BankATMMenuUiKey значения ATM и BlackMarket были слиты в одно, так как второе не имело дополнительной логики, но создавало двузначность.
Персональная информация игрока теперь отправляется через отдельное сообщение вместо общего состояния интерфейса.
Возможность банкомата делать депозит определяется сервером, а не отключением блока интерфейса.
В BankAccountComponent теперь хранится история операций. Она очищает 30 первых записей при достижении 50-и.

Как протестировать

На NFDev чуть выше и левее стоят все банкоматы, кроме банкомата Нордфолла/Тайпана.

Медиа

image image

Требования

Критические изменения

Отсутствуют.

Журнал изменений

🆑

  • add: Банкомат теперь показывает 10 последних операций, номер ЮПИ (вместо всплывающего сообщения над игроком) и взломан ли он (ЧР/Синдикат)
  • fix: Банкомат больше не показывает информацию предыдущего игрока

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Обновление системы/интерфейса банкомата: отображение 10 последних операций, показ «взломанности» (ЧР/Синдикат) и вывод номера ЮПИ внутри UI, а также устранение утечки UI-состояния между игроками за счёт отправки персональных данных отдельным сообщением.

Changes:

  • Вынесена логика ATM в отдельную LuaATMSystem и объединены UI-key’и банкомата в один (BankATMMenuUiKey.Key).
  • Добавлена история операций в BankAccountComponent и запись deposit/withdraw в BankSystem.
  • Новый клиентский UI банкомата (XAML + BUI) и новые сетевые состояния/сообщения для персональных данных.

Reviewed changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
Resources/Prototypes/_NF/Entities/Structures/atm.yml Перевод ATM’ов на новый UI-key и новый клиентский BUI; флаги withdrawOnly/corrupted.
Resources/Prototypes/_Lua/Entities/Structures/Machines/atm.yml Пометка Typan ATM как corrupted.
Resources/Locale/ru-RU/_Lua/bank/bank-ATM-component.ftl Новые строки для истории/ЮПИ/статуса и служебных подписей UI.
Content.Shared/_NF/Bank/SharedBankSystem.cs Слияние UI-key в один Key.
Content.Shared/_NF/Bank/Components/BankATMComponent.cs Переход CashType на ProtoId<StackPrototype>, добавлены флаги withdrawOnly/corrupted.
Content.Shared/_NF/Bank/Components/BankAccountComponent.cs Добавлены поля ЮПИ и истории операций (без авто-сетевой репликации).
Content.Shared/_Lua/Bank/UI/LuaATMMenuInterfaceState.cs Новый BUI state (corrupted/withdrawOnly/deposit).
Content.Shared/_Lua/Bank/Events/LuaATMMessages.cs Новое персональное UI-сообщение (баланс/ЮПИ/история).
Content.Shared/_Lua/Bank/BankAccountOperationType.cs Тип операции (Deposit/Withdraw).
Content.Shared/_Lua/Bank/BankAccountOperation.cs Структура записи операции (тип/значение/время).
Content.Server/_NF/Bank/StationATMSystem.cs Обновление использования UI-key на Key.
Content.Server/_NF/Bank/BankSystem.cs Запись операций в историю при withdraw/deposit.
Content.Server/_NF/Bank/ATMSystem.cs Отключение старых подписок (переход на LuaATMSystem).
Content.Server/_Lua/Bank/Systems/LuaATMSystem.cs Новая серверная система ATM: UI state + персональные сообщения, логика deposit/withdraw.
Content.Server/_Lua/Bank/Systems/BankSystem.cs Частичный класс BankSystem: хранение/очистка OperationHistory.
Content.Client/_Lua/Bank/UI/LuaATMMenuBoundUserInterface.cs Новый клиентский BUI-контроллер окна.
Content.Client/_Lua/Bank/UI/LuaATMMenu.xaml.cs Логика UI: отображение состояния/истории/ЮПИ, обработчики кнопок.
Content.Client/_Lua/Bank/UI/LuaATMMenu.xaml Разметка окна ATM с блоками ЮПИ/истории/футером.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +64 to +70
private void UpdateDeposit(bool withdrawOnly, int amount)
{
DepositButton.Disabled = amount <= 0;
DepositLabel.Text = amount >= 0
? BankSystemExtensions.ToSpesoString(amount)
: DepositLabel.Text = Loc.GetString("bank-atm-menu-cash-error");
DepositContainer.Visible = !withdrawOnly;
Comment on lines +137 to +141
private void OnAmountChanged(LineEdit.LineEditEventArgs args)
{
WithdrawButton.Disabled = !int.TryParse(args.Text, out var amount) || !_enabled;
_amount = amount;
}
Comment on lines +106 to +119
foreach (var operation in history)
{
var typeString = Loc.GetString($"bank-atm-menu-operation-{operation.Type.ToString().ToLower()}");
var valueString = BankSystemExtensions.ToSpesoString(operation.Value);
var timeString = operation.Time.ToString().Split('.')[0];
var operationString = Loc.GetString("bank-atm-menu-operation", ("type", typeString), ("value", valueString), ("time", timeString));

var operationLabel = new Label
{
Text = operationString
};

OperationHistoryContainer.AddChild(operationLabel);
}
Comment on lines +5 to +16
using Robust.Shared.Serialization;

namespace Content.Shared._Lua.Bank.Events;

[Serializable, NetSerializable]
public sealed class LuaATMPersonalInfoMessage(bool enabled, int balance, string yupiCode, List<BankAccountOperation> history) : BoundUserInterfaceMessage
{
public bool Enabled = enabled;
public int Balance = balance;
public string YUPICode = yupiCode;
public List<BankAccountOperation> History = history;
}
Comment on lines 13 to 16
{
[ViewVariables(VVAccess.ReadWrite), DataField("cashType", customTypeSerializer: typeof(PrototypeIdSerializer<StackPrototype>))]
public string CashType = "Credit";
[ViewVariables(VVAccess.ReadWrite)] // Lua
public ProtoId<StackPrototype> CashType = "Credit"; // Lua

Comment on lines +13 to +29
<Label Name="ATMName" Align="Center" Text="{Loc 'bank-atm-menu-name-nt'}"/>
</PanelContainer>
</controls:StripeBack>
<BoxContainer Margin="8 0 3 3" Orientation="Vertical">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc 'bank-atm-menu-balance-label'}" FontColorOverride="Silver"/>
<Label Name="BalanceLabel" Text="{Loc 'bank-atm-menu-no-bank'}" Margin="3 0"/>
</BoxContainer>
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc 'bank-atm-yupi-code'}" FontColorOverride="Silver"/>
<Label Name="YUPICode" Text="{Loc 'bank-atm-yupi-code-default'}" Margin="3 0" StyleClasses="monospace"/>
</BoxContainer>
<BoxContainer Orientation="Vertical" HorizontalExpand="True">
<Label Text="{Loc 'bank-atm-menu-operation-history-label'}" FontColorOverride="Silver"/>
<BoxContainer Name="OperationHistoryContainer" Orientation="Vertical">
<Label Text="{Loc 'bank-atm-menu-operation-default'}"/>
</BoxContainer>
station-bank-requires-reason = Требуются детали транзакции!
station-bank-unauthorized = Не авторизовано!
bank-atm-menu-cash-error = ERR: ОШИБКА
bank-atm-menu-cash-error = $ОШИБКА
@dovacot dovacot marked this pull request as draft May 27, 2026 15:20
@HacksLua

Copy link
Copy Markdown
Collaborator

Ага.

@dovacot dovacot changed the title Интерфейса банкомата: десять последних операций, взломанность, номер ЮПИ Интерфейс банкомата: десять последних операций, взломанность, номер ЮПИ May 27, 2026
@dovacot dovacot marked this pull request as ready for review May 27, 2026 16:24

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants