diff --git a/Content.Client/White/Economy/Ui/AtmWindow.xaml b/Content.Client/White/Economy/Ui/AtmWindow.xaml
index 2df0d41d1c..4847473efa 100644
--- a/Content.Client/White/Economy/Ui/AtmWindow.xaml
+++ b/Content.Client/White/Economy/Ui/AtmWindow.xaml
@@ -12,7 +12,7 @@
-
+
diff --git a/Content.Client/White/Economy/Ui/AtmWindow.xaml.cs b/Content.Client/White/Economy/Ui/AtmWindow.xaml.cs
index 5bae58a342..74650768e1 100644
--- a/Content.Client/White/Economy/Ui/AtmWindow.xaml.cs
+++ b/Content.Client/White/Economy/Ui/AtmWindow.xaml.cs
@@ -40,6 +40,7 @@ public sealed partial class AtmWindow : DefaultWindow
StatusLabel.Text = cast.InfoMessage;
BalanceLabel.Visible = false;
Divider.Visible = false;
+ StatusLabel.Visible = true;
WithdrawSlider.Visible = false;
PinLineEdit.Visible = false;
WithdrawButton.Visible = false;
@@ -50,13 +51,25 @@ public sealed partial class AtmWindow : DefaultWindow
BalanceLabel.Text = Loc.GetString("atm-ui-balance", ("balance", cast.AccountBalance));
BalanceLabel.Visible = true;
- Divider.Visible = true;
- WithdrawSlider.Visible = true;
- PinLineEdit.Visible = true;
- WithdrawButton.Visible = true;
- WithdrawSlider.MaxValue = cast.AccountBalance;
- WithdrawSlider.Value = Math.Min(WithdrawSlider.Value, cast.AccountBalance);
+ if (cast.AccountBalance > 0)
+ {
+ Divider.Visible = true;
+ StatusLabel.Visible = true;
+ WithdrawSlider.Visible = true;
+ PinLineEdit.Visible = true;
+ WithdrawButton.Visible = true;
+
+ WithdrawSlider.MaxValue = cast.AccountBalance;
+ WithdrawSlider.Value = Math.Min(WithdrawSlider.Value, cast.AccountBalance);
+ return;
+ }
+
+ Divider.Visible = false;
+ StatusLabel.Visible = false;
+ WithdrawSlider.Visible = false;
+ PinLineEdit.Visible = false;
+ WithdrawButton.Visible = false;
}
protected override void FrameUpdate(FrameEventArgs args)
diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs
index c4a5f17805..62690f88d7 100644
--- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs
+++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs
@@ -459,6 +459,7 @@ namespace Content.Server.GameTicking
ResettingCleanup();
IncrementRoundNumber();
SendRoundStartingDiscordMessage();
+ EnableShuttleCall(); // WD
if (!LobbyEnabled)
{
@@ -572,6 +573,15 @@ namespace Content.Server.GameTicking
_utkaSocketWrapper.SendMessageToAll(utkaRoundStatusEvent);
}
+
+ private void EnableShuttleCall()
+ {
+ if (_configurationManager.GetCVar(WhiteCVars.EmergencyShuttleCallEnabled))
+ return;
+
+ _configurationManager.SetCVar(WhiteCVars.EmergencyShuttleCallEnabled, true);
+ _chatManager.SendAdminAnnouncement("Вызов шаттла включен.");
+ }
//WD-EDIT
private void UpdateRoundFlow(float frameTime)
diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs
index 9134f4316c..0806c66f8f 100644
--- a/Content.Server/VendingMachines/VendingMachineSystem.cs
+++ b/Content.Server/VendingMachines/VendingMachineSystem.cs
@@ -164,7 +164,10 @@ namespace Content.Server.VendingMachines
private void OnEmagged(EntityUid uid, VendingMachineComponent component, ref GotEmaggedEvent args)
{
// only emag if there are emag-only items
- args.Handled = component.EmaggedInventory.Count > 0;
+ args.Handled = component.EmaggedInventory.Count > 0 || component.PriceMultiplier > 0; // WD EDIT START
+ component.PriceMultiplier = 0;
+ UpdateVendingMachineInterfaceState(uid, component);
+ // WD EDIT END
}
private void OnDamage(EntityUid uid, VendingMachineComponent component, DamageChangedEvent args)
diff --git a/Content.Server/White/Economy/ATMSystem.cs b/Content.Server/White/Economy/ATMSystem.cs
index 0639dba8d8..b291f5bc32 100644
--- a/Content.Server/White/Economy/ATMSystem.cs
+++ b/Content.Server/White/Economy/ATMSystem.cs
@@ -1,6 +1,9 @@
using System.Linq;
using Content.Server.Stack;
using Content.Server.Store.Components;
+using Content.Shared.Destructible;
+using Content.Shared.Emag.Components;
+using Content.Shared.Emag.Systems;
using Content.Shared.Interaction;
using Content.Shared.Popups;
using Content.Shared.Stacks;
@@ -32,6 +35,12 @@ public sealed class ATMSystem : SharedATMSystem
SubscribeLocalEvent(OnWithdrawRequest);
SubscribeLocalEvent(OnInteractUsing);
SubscribeLocalEvent(OnComponentStartup);
+ SubscribeLocalEvent(OnEmag);
+ }
+
+ private void OnEmag(EntityUid uid, ATMComponent component, ref GotEmaggedEvent args)
+ {
+ args.Handled = true;
}
private void OnComponentStartup(EntityUid uid, ATMComponent component, ComponentStartup args)
@@ -89,7 +98,8 @@ public sealed class ATMSystem : SharedATMSystem
return;
}
- if (!_bankCardSystem.TryGetAccount(bankCard.BankAccountId.Value, out var account) || account.AccountPin != args.Pin)
+ if (!_bankCardSystem.TryGetAccount(bankCard.BankAccountId.Value, out var account) ||
+ account.AccountPin != args.Pin && !HasComp(uid))
{
_popupSystem.PopupEntity(Loc.GetString("atm-wrong-pin"), uid);
_audioSystem.PlayPvs(component.SoundDeny, uid);
diff --git a/Content.Server/White/Economy/EftposSystem.cs b/Content.Server/White/Economy/EftposSystem.cs
index 90edbede55..1678480a79 100644
--- a/Content.Server/White/Economy/EftposSystem.cs
+++ b/Content.Server/White/Economy/EftposSystem.cs
@@ -26,7 +26,7 @@ public sealed class EftposSystem : EntitySystem
private void OnInteractUsing(EntityUid uid, EftposComponent component, InteractUsingEvent args)
{
if (component.BankAccountId == null || !TryComp(args.Used, out BankCardComponent? bankCard) ||
- bankCard.BankAccountId == component.BankAccountId || component.Amount <= 0)
+ bankCard.BankAccountId == component.BankAccountId || component.Amount <= 0 || bankCard.CommandBudgetCard)
return;
if (_bankCardSystem.TryChangeBalance(bankCard.BankAccountId!.Value, -component.Amount) &&
diff --git a/Content.Server/White/Other/RandomHumanSystem/RandomHumanSystem.cs b/Content.Server/White/Other/RandomHumanSystem/RandomHumanSystem.cs
index 856b37e75e..8037c18231 100644
--- a/Content.Server/White/Other/RandomHumanSystem/RandomHumanSystem.cs
+++ b/Content.Server/White/Other/RandomHumanSystem/RandomHumanSystem.cs
@@ -1,7 +1,10 @@
+using System.Linq;
using Content.Server.Access.Systems;
using Content.Server.Humanoid;
using Content.Server.IdentityManagement;
+using Content.Server.Mind.Components;
using Content.Server.PDA;
+using Content.Server.Roles;
using Content.Shared.Access.Components;
using Content.Shared.Inventory;
using Content.Shared.PDA;
@@ -31,6 +34,10 @@ public sealed class RandomHumanSystem : EntitySystem
_humanoid.LoadProfile(uid, newProfile);
+ if (TryComp(uid, out MindContainerComponent? mindContainer) && mindContainer.HasMind &&
+ mindContainer.Mind.Roles.OfType().Any())
+ return;
+
_metaData.SetEntityName(uid, newProfile.Name);
if (!_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid))
diff --git a/Resources/Locale/ru-RU/cult/effects.ftl b/Resources/Locale/ru-RU/cult/effects.ftl
new file mode 100644
index 0000000000..3d8f722cca
--- /dev/null
+++ b/Resources/Locale/ru-RU/cult/effects.ftl
@@ -0,0 +1 @@
+reagent-effect-guidebook-deconvert-cultist = Деконвертирует культиста
diff --git a/Resources/Locale/ru-RU/white/economy/atm.ftl b/Resources/Locale/ru-RU/white/economy/atm.ftl
index 7ad8105fd6..461d51442f 100644
--- a/Resources/Locale/ru-RU/white/economy/atm.ftl
+++ b/Resources/Locale/ru-RU/white/economy/atm.ftl
@@ -3,6 +3,7 @@ atm-wrong-pin = Неверный PIN-код.
atm-not-enough-cash = Недостаточно средств.
+atm-ui-enter-pin = Введите PIN
atm-ui-select-withdraw-amount = Выберите сумму вывода.
atm-ui-insert-card = Вставьте карту.
atm-ui-balance = Баланс: { $balance } ¢
diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml
index 427acd1863..1780f34a72 100644
--- a/Resources/Prototypes/Actions/types.yml
+++ b/Resources/Prototypes/Actions/types.yml
@@ -114,8 +114,7 @@
noSpawn: true
components:
- type: InstantAction
- charges: 3
- useDelay: 5
+ useDelay: 40
itemIconStyle: BigAction
priority: -20
icon:
diff --git a/Resources/Prototypes/White/Actions/types.yml b/Resources/Prototypes/White/Actions/types.yml
index 234a38ebfe..640129826c 100644
--- a/Resources/Prototypes/White/Actions/types.yml
+++ b/Resources/Prototypes/White/Actions/types.yml
@@ -5,7 +5,7 @@
noSpawn: true
components:
- type: InstantAction
- useDelay: 20
+ useDelay: 40
itemIconStyle: BigAction
priority: -20
icon:
diff --git a/Resources/Prototypes/White/Structures/Machines/atm.yml b/Resources/Prototypes/White/Structures/Machines/atm.yml
index 6f97d45db9..97dc0c479c 100644
--- a/Resources/Prototypes/White/Structures/Machines/atm.yml
+++ b/Resources/Prototypes/White/Structures/Machines/atm.yml
@@ -44,15 +44,17 @@
enabled: false
sound:
path: /Audio/Ambience/Objects/vending_machine_hum.ogg
- # - type: Destructible
- # thresholds:
- # - trigger:
- # !type:DamageTrigger
- # damage: 100
- # behaviors:
- # - !type:DoActsBehavior
- # acts: ["Breakage"]
- # - !type:EjectVendorItems
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Metallic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
- type: ActivatableUI
key: enum.ATMUiKey.Key
singleUser: true