Очередные фиксы (#3569)
This commit is contained in:
parent
c266528620
commit
401f7970eb
28 changed files with 89 additions and 160 deletions
|
|
@ -40,6 +40,7 @@ using Robust.Shared.Prototypes;
|
|||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Replays;
|
||||
using Robust.Shared.Utility;
|
||||
using Content.Shared._Sunrise.TTS;
|
||||
|
||||
namespace Content.Server.Chat.Systems;
|
||||
|
||||
|
|
@ -346,7 +347,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||
bool playDefault = true,
|
||||
SoundSpecifier? announcementSound = null,
|
||||
bool playTts = true, // Sunrise-edit,
|
||||
string? announceVoice = null, // Sunrise-edit
|
||||
ProtoId<TTSVoicePrototype>? announceVoice = null, // Sunrise-edit
|
||||
Color? colorOverride = null
|
||||
)
|
||||
{
|
||||
|
|
@ -386,7 +387,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||
string? sender = null,
|
||||
bool playDefault = true, // Sunrise-edit
|
||||
bool playTts = true, // Sunrise-edit
|
||||
string? announceVoice = null, // Sunrise-edit
|
||||
ProtoId<TTSVoicePrototype>? announceVoice = null, // Sunrise-edit
|
||||
SoundSpecifier? announcementSound = null,
|
||||
Color? colorOverride = null)
|
||||
{
|
||||
|
|
@ -432,7 +433,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||
string? sender = null,
|
||||
bool playDefault = true, // Sunrise
|
||||
bool playTts = true, // Sunrise
|
||||
string? announceVoice = null, // Sunrise
|
||||
ProtoId<TTSVoicePrototype>? announceVoice = null, // Sunrise
|
||||
bool playDefaultSound = true,
|
||||
SoundSpecifier? announcementSound = null,
|
||||
Color? colorOverride = null)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
using Content.Server.Database.Migrations.Postgres;
|
||||
using Content.Server.UserInterface;
|
||||
using Content.Shared._Sunrise.TTS;
|
||||
using Content.Shared.Communications;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Server.Communications
|
||||
|
|
@ -78,8 +81,8 @@ namespace Content.Server.Communications
|
|||
public bool AnnounceSentBy = false;
|
||||
|
||||
// Sunrise-Start
|
||||
[DataField("announceVoice", customTypeSerializer:typeof(PrototypeIdSerializer<TTSVoicePrototype>))]
|
||||
public string AnnounceVoice = "Hanson";
|
||||
[DataField]
|
||||
public ProtoId<TTSVoicePrototype>? AnnounceVoice = "Hanson";
|
||||
|
||||
[ViewVariables]
|
||||
public bool IsRelaying;
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ public sealed partial class EnergyDomeSystem : EntitySystem
|
|||
{
|
||||
_battery.UseCharge(cell.Value.Owner, energyLeak);
|
||||
|
||||
if (cell.Value.Comp.ChargeRate == 0)
|
||||
if (cell.Value.Comp.LastCharge == 0)
|
||||
TurnOff((generatorUid, generatorComp), true);
|
||||
}
|
||||
}
|
||||
|
|
@ -226,7 +226,7 @@ public sealed partial class EnergyDomeSystem : EntitySystem
|
|||
if (TryComp<BatteryComponent>(generatorUid, out var battery)) {
|
||||
_battery.UseCharge(generatorUid, energyLeak);
|
||||
|
||||
if (battery.ChargeRate == 0)
|
||||
if (battery.LastCharge == 0)
|
||||
TurnOff((generatorUid, generatorComp), true);
|
||||
}
|
||||
}
|
||||
|
|
@ -251,58 +251,53 @@ public sealed partial class EnergyDomeSystem : EntitySystem
|
|||
public bool AttemptToggle(Entity<EnergyDomeGeneratorComponent> generator, bool status)
|
||||
{
|
||||
var parent = Transform(generator.Owner).ParentUid;
|
||||
|
||||
if (HasComp<ContainerManagerComponent>(Transform(parent).ParentUid))
|
||||
return false;
|
||||
|
||||
if (TryComp<UseDelayComponent>(generator, out var useDelay) &&
|
||||
_useDelay.IsDelayed((generator, useDelay)))
|
||||
{
|
||||
Fail(generator, "energy-dome-recharging");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (TryComp<UseDelayComponent>(generator, out var useDelay) && _useDelay.IsDelayed(new (generator, useDelay)))
|
||||
if (TryComp<PowerCellSlotComponent>(generator, out _))
|
||||
{
|
||||
_audio.PlayPvs(generator.Comp.TurnOffSound, generator);
|
||||
_popup.PopupEntity(
|
||||
Loc.GetString("energy-dome-recharging"),
|
||||
generator);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (TryComp<PowerCellComponent>(generator, out var powerCellSlot))
|
||||
{
|
||||
if (!_powerCell.TryGetBatteryFromSlot(generator.Owner, out var cell) &&
|
||||
!HasComp<BatteryComponent>(generator.Owner))
|
||||
if (!_powerCell.TryGetBatteryFromSlot(generator.Owner, out _))
|
||||
{
|
||||
_audio.PlayPvs(generator.Comp.TurnOffSound, generator);
|
||||
_popup.PopupEntity(
|
||||
Loc.GetString("energy-dome-no-cell"),
|
||||
generator);
|
||||
Fail(generator, "energy-dome-no-cell");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_powerCell.HasDrawCharge(generator.Owner))
|
||||
{
|
||||
_audio.PlayPvs(generator.Comp.TurnOffSound, generator);
|
||||
_popup.PopupEntity(
|
||||
Loc.GetString("energy-dome-no-power"),
|
||||
generator);
|
||||
Fail(generator, "energy-dome-no-power");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (TryComp<BatteryComponent>(generator, out var battery))
|
||||
else if (TryComp<BatteryComponent>(generator, out var battery))
|
||||
{
|
||||
if (battery.ChargeRate == 0)
|
||||
if (battery.LastCharge <= 0)
|
||||
{
|
||||
_audio.PlayPvs(generator.Comp.TurnOffSound, generator);
|
||||
_popup.PopupEntity(
|
||||
Loc.GetString("energy-dome-no-power"),
|
||||
generator);
|
||||
Fail(generator, "energy-dome-no-power");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Fail(generator, "energy-dome-no-power");
|
||||
return false;
|
||||
}
|
||||
|
||||
Toggle(generator, status);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void Fail(Entity<EnergyDomeGeneratorComponent> generator, string locKey)
|
||||
{
|
||||
_audio.PlayPvs(generator.Comp.TurnOffSound, generator);
|
||||
_popup.PopupEntity(Loc.GetString(locKey), generator);
|
||||
}
|
||||
private void Toggle(Entity<EnergyDomeGeneratorComponent> generator, bool status)
|
||||
{
|
||||
if (status)
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public sealed class MechGunSystem : EntitySystem
|
|||
|| !TryComp<MechComponent>(mechEquipment.EquipmentOwner.Value, out var mech))
|
||||
return;
|
||||
|
||||
var chargeDelta = component.MaxCharge - component.ChargeRate;
|
||||
var chargeDelta = component.MaxCharge - component.LastCharge;
|
||||
// TODO: The battery charge of the mech would be spent directly when fired.
|
||||
if (chargeDelta <= 0
|
||||
|| mech.Energy - chargeDelta < 0
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ public sealed class HealthAnalyzerSystem : AbstractAnalyzerSystem<HealthAnalyzer
|
|||
{
|
||||
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
||||
[Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void UpdateScannedUser(EntityUid healthAnalyzer, EntityUid target, bool scanMode)
|
||||
|
|
@ -64,10 +65,9 @@ public sealed class HealthAnalyzerSystem : AbstractAnalyzerSystem<HealthAnalyzer
|
|||
_solutionContainerSystem.ResolveSolution(target, bloodstream.BloodSolutionName,
|
||||
ref bloodstream.BloodSolution, out var bloodSolution))
|
||||
{
|
||||
bloodAmount = bloodSolution.FillFraction;
|
||||
bloodAmount = _bloodstreamSystem.GetBloodLevel(target);
|
||||
bleeding = bloodstream.BleedAmount > 0;
|
||||
}
|
||||
|
||||
// Collect hunger and thirst data as percentages
|
||||
float hungerLevel = -1;
|
||||
float thirstLevel = -1;
|
||||
|
|
|
|||
|
|
@ -104,8 +104,8 @@ public sealed class NinjaSuitDrawSystem : SharedNinjaSuitDrawSystem
|
|||
|
||||
if (_ninja.GetNinjaBattery(user, out _, out var battery))
|
||||
{
|
||||
var canUse = ent.Comp.UseRate <= 0f || battery.ChargeRate >= ent.Comp.UseRate;
|
||||
var canDraw = ent.Comp.DrawRate <= 0f || battery.ChargeRate > 0f;
|
||||
var canUse = ent.Comp.UseRate <= 0f || battery.LastCharge >= ent.Comp.UseRate;
|
||||
var canDraw = ent.Comp.DrawRate <= 0f || battery.LastCharge > 0f;
|
||||
SetPowerStatus(ent, canDraw, canUse);
|
||||
if (!canUse)
|
||||
{
|
||||
|
|
@ -138,7 +138,7 @@ public sealed class NinjaSuitDrawSystem : SharedNinjaSuitDrawSystem
|
|||
if (!_ninja.IsNinja(user))
|
||||
return false;
|
||||
|
||||
return _ninja.GetNinjaBattery(user, out _, out var battery) && battery.ChargeRate > 0f;
|
||||
return _ninja.GetNinjaBattery(user, out _, out var battery) && battery.LastCharge > 0f;
|
||||
}
|
||||
|
||||
public override bool CanUse(Entity<NinjaSuitDrawComponent> ent)
|
||||
|
|
@ -148,7 +148,7 @@ public sealed class NinjaSuitDrawSystem : SharedNinjaSuitDrawSystem
|
|||
return false;
|
||||
|
||||
return _ninja.GetNinjaBattery(user, out _, out var battery) &&
|
||||
(ent.Comp.UseRate <= 0f || battery.ChargeRate >= ent.Comp.UseRate);
|
||||
(ent.Comp.UseRate <= 0f || battery.LastCharge >= ent.Comp.UseRate);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ public sealed class BorgVoiceSystem : EntitySystem
|
|||
// Use the borg's selected voice instead of the default
|
||||
if (component.SelectedVoiceId != null)
|
||||
{
|
||||
args.VoiceId = component.SelectedVoiceId;
|
||||
args.VoiceId = component.SelectedVoiceId.Value;
|
||||
}
|
||||
args.Effect = component.VoiceEffect;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Content.Shared.Chat;
|
||||
using Content.Server.Chat.Systems;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Content.Shared._Sunrise.Animations;
|
||||
|
||||
namespace Content.Server.Speech;
|
||||
|
||||
|
|
@ -22,8 +23,11 @@ public sealed partial class EmotesMenuSystem : EntitySystem
|
|||
if (!player.HasValue)
|
||||
return;
|
||||
|
||||
if (!_prototypeManager.Resolve(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0)
|
||||
return;
|
||||
if (!_prototypeManager.TryIndex(msg.ProtoId, out var proto) || proto.ChatTriggers.Count == 0)
|
||||
{
|
||||
if (!HasComp<EmoteAnimationComponent>(player))
|
||||
return;
|
||||
}
|
||||
|
||||
_chat.TryEmoteWithChat(player.Value, msg.ProtoId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ public sealed class UplinkSystem : EntitySystem
|
|||
// Sunrtise-Start
|
||||
|
||||
if (pdaUid == null)
|
||||
return null;
|
||||
continue;
|
||||
|
||||
if (_tagSystem.HasTag(pdaUid.Value, "SunriseUplink"))
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
using Content.Shared._Sunrise.TTS;
|
||||
using Content.Shared.Humanoid;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.VoiceMask;
|
||||
|
||||
|
|
@ -7,5 +9,5 @@ public sealed partial class VoiceMaskerComponent : Component
|
|||
{
|
||||
[DataField]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public string VoiceId = SharedHumanoidAppearanceSystem.DefaultVoice;
|
||||
public ProtoId<TTSVoicePrototype> VoiceId = SharedHumanoidAppearanceSystem.DefaultVoice;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ public sealed class AnnouncementSpeakerSystem : EntitySystem
|
|||
/// <summary>
|
||||
/// Gets a voice prototype by ID, with fallback to default voice.
|
||||
/// </summary>
|
||||
private bool GetVoicePrototype(string voiceId, [NotNullWhen(true)] out TTSVoicePrototype? voicePrototype)
|
||||
private bool GetVoicePrototype(ProtoId<TTSVoicePrototype> voiceId, [NotNullWhen(true)] out TTSVoicePrototype? voicePrototype)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex(voiceId, out voicePrototype))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public sealed class EnergyShieldSystem : EntitySystem
|
|||
_battery.UseCharge(ent.Owner, cost);
|
||||
_audio.PlayPvs(ent.Comp.AbsorbSound, ent);
|
||||
|
||||
if (battery.ChargeRate <= 0)
|
||||
if (battery.LastCharge <= 0)
|
||||
{
|
||||
_itemToggle.Toggle(ent.Owner);
|
||||
_audio.PlayPvs(ent.Comp.ShutdownSound, ent);
|
||||
|
|
@ -54,7 +54,7 @@ public sealed class EnergyShieldSystem : EntitySystem
|
|||
private void OnToggleAttempt(Entity<EnergyShieldComponent> ent, ref ItemToggleActivateAttemptEvent args)
|
||||
{
|
||||
if (TryComp<BatteryComponent>(ent, out var battery) &&
|
||||
battery.ChargeRate >= battery.MaxCharge * ent.Comp.MinChargeFractionForActivation)
|
||||
battery.LastCharge >= battery.MaxCharge * ent.Comp.MinChargeFractionForActivation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,10 +110,10 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
return;
|
||||
|
||||
var voiceId = senderComponent.VoicePrototypeId;
|
||||
if (voiceId == null)
|
||||
if (voiceId == null || string.IsNullOrWhiteSpace(voiceId.Value))
|
||||
return;
|
||||
|
||||
var voiceEv = new TransformSpeakerVoiceEvent(args.Source, voiceId);
|
||||
var voiceEv = new TransformSpeakerVoiceEvent(args.Source, voiceId.Value);
|
||||
RaiseLocalEvent(args.Source, voiceEv);
|
||||
voiceId = voiceEv.VoiceId;
|
||||
|
||||
|
|
@ -139,7 +139,7 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
return;
|
||||
|
||||
var voiceId = collectiveMindProto.VoiceId;
|
||||
if (voiceId == null)
|
||||
if (voiceId == null || string.IsNullOrWhiteSpace(voiceId.Value))
|
||||
return;
|
||||
|
||||
if (!GetVoicePrototype(voiceId, out var protoVoice))
|
||||
|
|
@ -159,7 +159,7 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
RaiseNetworkEvent(new PlayTTSEvent(soundData, null, false), recipients);
|
||||
}
|
||||
|
||||
private bool GetVoicePrototype(string voiceId, [NotNullWhen(true)] out TTSVoicePrototype? voicePrototype)
|
||||
private bool GetVoicePrototype(ProtoId<TTSVoicePrototype>? voiceId, [NotNullWhen(true)] out TTSVoicePrototype? voicePrototype)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex(voiceId, out voicePrototype))
|
||||
{
|
||||
|
|
@ -256,10 +256,10 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
var voiceId = component.VoicePrototypeId;
|
||||
if (!_isEnabled ||
|
||||
args.Message.Length > MaxMessageChars ||
|
||||
voiceId == null)
|
||||
voiceId == null || string.IsNullOrWhiteSpace(voiceId.Value))
|
||||
return;
|
||||
|
||||
var voiceEv = new TransformSpeakerVoiceEvent(uid, voiceId);
|
||||
var voiceEv = new TransformSpeakerVoiceEvent(uid, voiceId.Value);
|
||||
RaiseLocalEvent(uid, voiceEv);
|
||||
voiceId = voiceEv.VoiceId;
|
||||
|
||||
|
|
@ -368,10 +368,10 @@ public sealed partial class TTSSystem : EntitySystem
|
|||
public sealed class TransformSpeakerVoiceEvent : EntityEventArgs
|
||||
{
|
||||
public EntityUid Sender;
|
||||
public string VoiceId;
|
||||
public ProtoId<TTSVoicePrototype> VoiceId;
|
||||
public string? Effect;
|
||||
|
||||
public TransformSpeakerVoiceEvent(EntityUid sender, string voiceId, string? effect = null)
|
||||
public TransformSpeakerVoiceEvent(EntityUid sender, ProtoId<TTSVoicePrototype> voiceId, string? effect = null)
|
||||
{
|
||||
Sender = sender;
|
||||
VoiceId = voiceId;
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public sealed class PowerDrainOnMeleeHitSystem : EntitySystem
|
|||
// Fall back to direct BatteryComponent on the same entity
|
||||
if (TryComp<BatteryComponent>(uid, out var directBattery))
|
||||
{
|
||||
if (directBattery.ChargeRate < comp.ChargePerHit)
|
||||
if (directBattery.LastCharge < comp.ChargePerHit)
|
||||
{
|
||||
args.Handled = true;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ using Robust.Shared.Player;
|
|||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Utility;
|
||||
using Content.Shared._Sunrise.TTS;
|
||||
|
||||
namespace Content.Shared.Chat;
|
||||
|
||||
|
|
@ -470,7 +471,7 @@ public abstract partial class SharedChatSystem : EntitySystem
|
|||
bool playSound = true,
|
||||
SoundSpecifier? announcementSound = null,
|
||||
bool playTts = true, // Sunrise-edit
|
||||
string? announceVoice = null, // Sunrise-edit
|
||||
ProtoId<TTSVoicePrototype>? announceVoice = null, // Sunrise-edit
|
||||
Color? colorOverride = null
|
||||
)
|
||||
{ }
|
||||
|
|
@ -492,7 +493,7 @@ public abstract partial class SharedChatSystem : EntitySystem
|
|||
string? sender = null,
|
||||
bool playSound = true,
|
||||
bool playTts = true, // Sunrise-edit
|
||||
string? announceVoice = null, // Sunrise-edit
|
||||
ProtoId<TTSVoicePrototype>? announceVoice = null, // Sunrise-edit
|
||||
SoundSpecifier? announcementSound = null,
|
||||
Color? colorOverride = null)
|
||||
{ }
|
||||
|
|
@ -512,7 +513,7 @@ public abstract partial class SharedChatSystem : EntitySystem
|
|||
string? sender = null,
|
||||
bool playDefault = true, // Sunrise
|
||||
bool playTts = true, // Sunrise
|
||||
string? announceVoice = null, // Sunrise
|
||||
ProtoId<TTSVoicePrototype>? announceVoice = null, // Sunrise
|
||||
bool playDefaultSound = true,
|
||||
SoundSpecifier? announcementSound = null,
|
||||
Color? colorOverride = null)
|
||||
|
|
|
|||
|
|
@ -586,7 +586,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem
|
|||
|
||||
// Sunrise-TTS-Start
|
||||
// ReSharper disable once InconsistentNaming
|
||||
public void SetTTSVoice(EntityUid uid, string voiceId, HumanoidAppearanceComponent humanoid)
|
||||
public void SetTTSVoice(EntityUid uid, ProtoId<TTSVoicePrototype> voiceId, HumanoidAppearanceComponent humanoid)
|
||||
{
|
||||
if (!TryComp<TTSComponent>(uid, out var comp))
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ namespace Content.Shared.Preferences
|
|||
public ProtoId<SpeciesPrototype> Species { get; set; } = SharedHumanoidAppearanceSystem.DefaultSpecies;
|
||||
|
||||
[DataField]
|
||||
public string Voice { get; set; } = SharedHumanoidAppearanceSystem.DefaultVoice;
|
||||
public ProtoId<TTSVoicePrototype> Voice { get; set; } = SharedHumanoidAppearanceSystem.DefaultVoice;
|
||||
|
||||
[DataField]
|
||||
public int Age { get; set; } = 18;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using Content.Shared._Sunrise.TTS;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Sunrise.CollectiveMind;
|
||||
|
|
@ -18,7 +19,7 @@ public sealed partial class CollectiveMindPrototype : IPrototype
|
|||
public Color Color { get; private set; } = Color.Lime;
|
||||
|
||||
[DataField("voiceId")]
|
||||
public string? VoiceId { get; private set; } = null;
|
||||
public ProtoId<TTSVoicePrototype>? VoiceId;
|
||||
|
||||
[DataField("showAuthor")]
|
||||
public bool ShowAuthor { get; private set; } = false;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
using Content.Server._Sunrise.Emp;
|
||||
using Content.Shared._Sunrise.Emp;
|
||||
|
||||
namespace Content.Server.Emp;
|
||||
namespace Content.Shared._Sunrise.Emp;
|
||||
|
||||
/// <summary>
|
||||
/// Upon being triggered will EMP area around it.
|
||||
|
|
@ -9,5 +9,4 @@ namespace Content.Server.Emp;
|
|||
[Access(typeof(EmpImmuneSystem))]
|
||||
public sealed partial class EmpImmuneComponent : Component
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
using Content.Server.Emp;
|
||||
using Content.Shared.Emp;
|
||||
|
||||
namespace Content.Server._Sunrise.Emp;
|
||||
namespace Content.Shared._Sunrise.Emp;
|
||||
|
||||
public sealed class EmpImmuneSystem : EntitySystem
|
||||
{
|
||||
|
|
@ -13,7 +12,7 @@ public sealed class EmpImmuneSystem : EntitySystem
|
|||
SubscribeLocalEvent<EmpImmuneComponent, EmpAttemptEvent>(OnEmpAttempt);
|
||||
}
|
||||
|
||||
private void OnEmpAttempt(EntityUid uid, EmpImmuneComponent comp, EmpAttemptEvent args)
|
||||
private void OnEmpAttempt(Entity<EmpImmuneComponent> ent, ref EmpAttemptEvent args)
|
||||
{
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Shared._Sunrise.TTS;
|
||||
|
|
@ -13,7 +14,6 @@ public sealed partial class TTSComponent : Component
|
|||
/// <summary>
|
||||
/// Prototype of used voice for TTS.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("voice", customTypeSerializer: typeof(PrototypeIdSerializer<TTSVoicePrototype>))]
|
||||
public string? VoicePrototypeId { get; set; } = "Voljin"; // Fish-edit: Default voice when component is freshly added
|
||||
[DataField("voice")]
|
||||
public ProtoId<TTSVoicePrototype>? VoicePrototypeId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ namespace Content.Shared._Sunrise.TTS;
|
|||
[Prototype("ttsVoice")]
|
||||
public sealed partial class TTSVoicePrototype : IPrototype
|
||||
{
|
||||
[ViewVariables]
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
|
|
@ -15,11 +16,9 @@ public sealed partial class TTSVoicePrototype : IPrototype
|
|||
[DataField(required: true)]
|
||||
public Sex Sex;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField(required: true)]
|
||||
public string Speaker = string.Empty;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField(required: true)]
|
||||
public string Provider = string.Empty;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
ent-AirAlarm = сирена воздушной тревоги
|
||||
ent-AirAlarm = воздушная тревога
|
||||
.desc = Сирена воздушной тревоги. Тревога... воздух?
|
||||
ent-AirAlarmAssembly = сборочный модуль сирены воздушной тревоги
|
||||
.desc = Сборочный модуль сирены воздушной тревоги. Не похоже, что она будет тревожить воздух в ближайшее время.
|
||||
ent-AirAlarmXeno = сирена воздушной тревоги
|
||||
ent-AirAlarmXeno = воздушная тревога
|
||||
.desc = Инопланетная сирена воздушной тревоги. Надеюсь, они не дышали ядом.
|
||||
ent-AirAlarmAssemblyXeno = сборочный модуль сирены воздушной тревоги
|
||||
.desc = Инопланетная сирена воздушной тревоги. Почему провода пульсируют?...
|
||||
.desc = Инопланетная сирена воздушной тревоги. Почему провода пульсируют?...
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ atmos-alerts-window-station-name = [color=white][font size=14]{ $stationName }[/
|
|||
atmos-alerts-window-unknown-location = Неизвестное местоположение
|
||||
atmos-alerts-window-tab-no-alerts = Предупреждения
|
||||
atmos-alerts-window-tab-alerts = Предупреждения ({ $value })
|
||||
atmos-alerts-window-tab-air-alarms = Воздушные тревоги
|
||||
atmos-alerts-window-tab-fire-alarms = Пожарные тревоги
|
||||
atmos-alerts-window-tab-air-alarms = Воздушные
|
||||
atmos-alerts-window-tab-fire-alarms = Пожарные
|
||||
atmos-alerts-window-alarm-label = { CAPITALIZE($name) } ({ $address })
|
||||
atmos-alerts-window-temperature-label = Температура
|
||||
atmos-alerts-window-temperature-value = { $valueInC } °C ({ $valueInK } K)
|
||||
|
|
|
|||
|
|
@ -248,6 +248,7 @@
|
|||
- type: CognizinFix
|
||||
- type: InjectNeed
|
||||
- type: CanJump
|
||||
isOnlyEmotion: false
|
||||
- type: CanFall
|
||||
# Sunrise-End
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
- type: EmitSoundOnUse
|
||||
sound:
|
||||
path: /Audio/_Sunrise/Items/Handling/paper_use.ogg
|
||||
handle: false
|
||||
- type: EmitSoundOnCollide
|
||||
sound:
|
||||
path: /Audio/_Sunrise/Items/Handling/paper_drop.ogg
|
||||
|
|
|
|||
|
|
@ -99,82 +99,3 @@
|
|||
- Toggle
|
||||
- On
|
||||
- Off
|
||||
|
||||
- type: entity
|
||||
id: EnergyDomeWiredTest
|
||||
name: Static Dome
|
||||
description: Test energy barrier powered by station wiring. I don't know how the hell to balance it.....
|
||||
parent: BaseMachine
|
||||
suffix: DO NOT MERGE
|
||||
placement:
|
||||
mode: SnapgridCenter
|
||||
components:
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.45,-0.45,0.45,0.45"
|
||||
density: 190
|
||||
mask:
|
||||
- MachineMask
|
||||
layer:
|
||||
- MachineLayer
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/Generation/Tesla/coil.rsi
|
||||
snapCardinals: true
|
||||
noRot: true
|
||||
layers:
|
||||
- state: coil
|
||||
- type: ExaminableBattery
|
||||
- type: Battery
|
||||
maxCharge: 30000 #<- max supply
|
||||
startingCharge: 10000
|
||||
- type: PowerNetworkBattery
|
||||
maxSupply: 30000
|
||||
maxChargeRate: 1000 #<- passive charging frow power net
|
||||
supplyRampTolerance: 500
|
||||
supplyRampRate: 50
|
||||
netsync: false # Sunrise edit
|
||||
- type: BatteryCharger
|
||||
voltage: Medium
|
||||
- type: NodeContainer
|
||||
examinable: true
|
||||
nodes:
|
||||
input:
|
||||
!type:CableDeviceNode
|
||||
nodeGroupID: MVPower
|
||||
- type: BatterySelfRecharger
|
||||
autoRechargeRate: -800 #<- discharge per second while active
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
damageModifierSet: Metallic
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 200
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: UseDelay
|
||||
delay: 30.0
|
||||
- type: DeviceNetwork
|
||||
deviceNetId: Wireless
|
||||
receiveFrequencyId: BasicDevice
|
||||
- type: WirelessNetworkConnection
|
||||
range: 200
|
||||
- type: DeviceLinkSink
|
||||
ports:
|
||||
- Toggle
|
||||
- On
|
||||
- Off
|
||||
- type: EnergyDomeGenerator
|
||||
enabled: true
|
||||
damageEnergyDraw: 100
|
||||
domePrototype: EnergyDomeSlowing
|
||||
canDeviceNetworkUse: true
|
||||
|
|
|
|||
|
|
@ -946,4 +946,6 @@ GrenadeFlashTimer: null
|
|||
|
||||
ImplantExtractorMachineCircuitboard: InterrogatorMachineCircuitboard
|
||||
|
||||
# 2026-01-02
|
||||
EnergyDomeWiredTest: null
|
||||
# Sunrise-End
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue