From c1cf6514bbd7d29880afdbc6cea3fcb9dcf99b16 Mon Sep 17 00:00:00 2001 From: MishaUnity <81403616+MishaUnity@users.noreply.github.com> Date: Sun, 18 Jan 2026 12:11:57 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D0=B0=D0=BD?= =?UTF-8?q?=D0=B4=D1=80=D0=BE=D0=B8=D0=B4=D0=BE=D0=B2=20(#466)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update AndroidSystem.cs * Update AndroidSystem.cs --- Content.Server/_WL/Android/AndroidSystem.cs | 68 +++++++++------------ 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/Content.Server/_WL/Android/AndroidSystem.cs b/Content.Server/_WL/Android/AndroidSystem.cs index 32995ebe13..f293ce145e 100644 --- a/Content.Server/_WL/Android/AndroidSystem.cs +++ b/Content.Server/_WL/Android/AndroidSystem.cs @@ -65,7 +65,6 @@ namespace Content.Server._WL.Android SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnDoAfter); - SubscribeLocalEvent(OnMobstateChanged); SubscribeLocalEvent(OnGetLightBulb); SubscribeLocalEvent(OnModifiersRefresh); SubscribeLocalEvent(OnToggle); @@ -86,14 +85,6 @@ namespace Content.Server._WL.Android continue; } - /* - if (!powerCellDrawComp.CanDraw) - { - _powerCell.SetDrawEnabled((uid, powerCellDrawComp), false); - continue; - } - */ - _powerCell.SetDrawEnabled((uid, powerCellDrawComp), true); } } @@ -204,20 +195,7 @@ namespace Content.Server._WL.Android args.Cancel(); } - private void OnMobstateChanged(EntityUid android, AndroidComponent comp, MobStateChangedEvent args) - { - if (!TryComp(android, out var powerCellDrawComp)) - return; - - /* - if (args.NewMobState == MobState.Dead) - powerCellDrawComp.CanDraw = false; - else powerCellDrawComp.CanDraw = true; - */ - } - - private void CheckAndDoForcedSleep(EntityUid android, - AndroidComponent comp) + private void CheckAndDoForcedSleep(EntityUid android, AndroidComponent comp) { if (_gameTiming.CurTime < comp.NextTime) return; @@ -227,12 +205,14 @@ namespace Content.Server._WL.Android if (!_powerCell.TryGetBatteryFromSlot(android, out var battery)) return; - if (battery == null) - return; - - if (battery.Value.Comp.ChargeRate / battery.Value.Comp.MaxCharge * 100 > 5f) - return; + if (battery == null || !_powerCell.HasDrawCharge(android)) + { + DoForcedSleep(android, comp); + } + } + private void DoForcedSleep(EntityUid android, AndroidComponent comp) + { if (_random.Prob(comp.ForcedSleepChance)) { var duration = _random.Next(comp.SleepTimeMin, comp.SleepTimeMax); @@ -246,11 +226,12 @@ namespace Content.Server._WL.Android return; if (!HasComp(args.User) || - !_powerCell.TryGetBatteryFromSlot(args.User, out var battery_ent)) + !_powerCell.TryGetBatteryFromSlot(args.User, out var batteryEnt) || + batteryEnt.Value.Comp.State == BatteryState.Full) return; if (!TryComp(args.Target, out var targetBattery) || - targetBattery.ChargeRate / targetBattery.MaxCharge * 100f <= 5f) + targetBattery.State == BatteryState.Empty) return; var doAfter = new DoAfterArgs(EntityManager, args.User, AndroidDoAfterChargeTime, new AndroidChargeEvent(), args.User, target, null) @@ -275,21 +256,30 @@ namespace Content.Server._WL.Android if (args.Cancelled || args.Handled) return; - if (!_powerCell.TryGetBatteryFromSlot(android, out var batteryEnt) - || batteryEnt.Value.Comp.ChargeRate / batteryEnt.Value.Comp.MaxCharge * 100f >= 95f - || batteryEnt == null - || !TryComp(args.Target, out var targetBattery) - || targetBattery.ChargeRate / targetBattery.MaxCharge * 100f <= 5f) + if (!_powerCell.TryGetBatteryFromSlot(android, out var batteryEnt) || !TryComp(batteryEnt, out var battery)) { args.Handled = true; return; } - if (!EntityManager.TryGetComponent(batteryEnt, out var battery)) - return; + float chargeTransfer = Math.Clamp(comp.ChargeRate, 0f, battery.MaxCharge - _battery.GetCharge(batteryEnt.Value.Owner)); - _battery.SetCharge((batteryEnt.Value, battery), battery.ChargeRate + comp.ChargeRate); - _battery.SetCharge(args.Target.Value, targetBattery.ChargeRate - comp.ChargeRate * comp.TargetDecreaseFactor); + if (chargeTransfer == 0f + || !HasComp(args.Target) + || _battery.GetCharge(args.Target.Value) < chargeTransfer * comp.TargetDecreaseFactor) + { + args.Handled = true; + return; + } + + _battery.ChangeCharge((batteryEnt.Value, battery), chargeTransfer); + _battery.ChangeCharge(args.Target.Value, -chargeTransfer * comp.TargetDecreaseFactor); + + if (battery.State == BatteryState.Full) + { + args.Handled = true; + return; + } args.Repeat = true; }