я устал, смена окончена

This commit is contained in:
Vigers Ray 2025-08-13 01:24:33 +03:00
parent 939076ff99
commit fb4ef153c8
86 changed files with 217 additions and 420 deletions

View file

@ -190,7 +190,7 @@ public sealed partial class PlantAnalyzerWindow : FancyWindow
("gases", gases),
("potency", Loc.GetString(msg.ProduceData.Potency)),
("seedless", msg.ProduceData.Seedless),
("firstProduce", msg.ProduceData.Produce.FirstOrDefault() ?? ""),
("firstProduce", msg.ProduceData.Produce.FirstOrDefault().Id ?? ""),
("produce", produce),
("producePlural", producePlural),
("chemCount", msg.ProduceData.Chemicals.Count),

View file

@ -257,7 +257,7 @@ public sealed partial class SingleMarkingPicker : BoxContainer
{
HorizontalExpand = true
};
selector.Color = marking.MarkingColors[i];
//selector.Color = marking.MarkingColors[i];
selector.CurrentType = selectorType;
var colorIndex = i;

View file

@ -61,6 +61,7 @@
MinWidth="200" />
</BoxContainer>
</controls:StripeBack>
<RichTextLabel Name="PlaytimeComment" Visible="False" Access="Public" HorizontalAlignment="Center" />
</BoxContainer>
</PanelContainer>
<BoxContainer Orientation="Vertical" SeparationOverride="4" Name="VoteContainer"

View file

@ -106,11 +106,6 @@ public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayS
{
_uri.OpenUri(_cfg.GetCVar(SunriseCCVars.InfoLinksDonate));
};
_escapeWindow.ForumButton.OnPressed += _ =>
{
_uri.OpenUri(_cfg.GetCVar(CCVars.InfoLinksForum));
};
// Sunrise-end
_escapeWindow.WikiButton.OnPressed += _ =>

View file

@ -43,7 +43,6 @@
HorizontalExpand="True"
AppendStyleClass="{x:Static style:StyleBase.ButtonSquare}"
/>
<!-- not needed because of new emote ui system
<ui:MenuButton
Name="EmotesButton"
Access="Internal"
@ -54,7 +53,6 @@
HorizontalExpand="True"
AppendStyleClass="{x:Static style:StyleBase.ButtonSquare}"
/>
-->
<ui:MenuButton
Name="CraftingButton"
Access="Internal"

View file

@ -8,9 +8,9 @@ namespace Content.Client._Sunrise.MarkingEffectsClient;
public static class MarkingEffectShaders
{
public static Robust.Shared.Maths.Vector3 ColorToVec(Color col)
public static Vector3 ColorToVec(Color col)
{
return new Robust.Shared.Maths.Vector3(col.R, col.G, col.B);
return new Vector3(col.R, col.G, col.B);
}
public static void ApplyShaderParams(this ShaderInstance instance, MarkingEffect color, Vector2 texScale)

View file

@ -33,7 +33,7 @@ public sealed class LoveVisionOverlay : Overlay
private readonly Robust.Client.Graphics.Texture _heartTexture;
private const string HeartTexturePath = "/Textures/_Sunrise/Interface/LoveVision/hearts.png";
private readonly Robust.Shared.Maths.Vector3 _gradientColor = new(1.0f, 0.3f, 0.7f); // Розово-фиолетовый
private readonly Vector3 _gradientColor = new(1.0f, 0.3f, 0.7f); // Розово-фиолетовый
private readonly List<HeartData> _hearts = [];
private struct HeartData

View file

@ -5,11 +5,10 @@ using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Shared.Prototypes;
using static Robust.Client.GameObjects.SpriteComponent;
using PaintedComponent = Content.Shared._Sunrise.Paint.PaintedComponent;
namespace Content.Client._Sunrise.Paint
{
public sealed class PaintedVisualizerSystem : VisualizerSystem<PaintedComponent>
public sealed class PaintedVisualizerSystem : VisualizerSystem<SprayPaintedComponent>
{
/// <summary>
/// Visualizer for Paint which applies a shader and colors the entity.
@ -24,12 +23,12 @@ namespace Content.Client._Sunrise.Paint
{
base.Initialize();
SubscribeLocalEvent<PaintedComponent, HeldVisualsUpdatedEvent>(OnHeldVisualsUpdated);
SubscribeLocalEvent<PaintedComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<PaintedComponent, EquipmentVisualsUpdatedEvent>(OnEquipmentVisualsUpdated);
SubscribeLocalEvent<SprayPaintedComponent, HeldVisualsUpdatedEvent>(OnHeldVisualsUpdated);
SubscribeLocalEvent<SprayPaintedComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<SprayPaintedComponent, EquipmentVisualsUpdatedEvent>(OnEquipmentVisualsUpdated);
}
protected override void OnAppearanceChange(EntityUid uid, PaintedComponent component, ref AppearanceChangeEvent args)
protected override void OnAppearanceChange(EntityUid uid, SprayPaintedComponent component, ref AppearanceChangeEvent args)
{
// ShaderPrototype sadly in Robust.Client, cannot move to shared component.
Shader = _protoMan.Index<ShaderPrototype>(component.ShaderName).Instance();
@ -56,7 +55,7 @@ namespace Content.Client._Sunrise.Paint
}
}
private void OnHeldVisualsUpdated(EntityUid uid, PaintedComponent component, HeldVisualsUpdatedEvent args)
private void OnHeldVisualsUpdated(EntityUid uid, SprayPaintedComponent component, HeldVisualsUpdatedEvent args)
{
if (args.RevealedLayers.Count == 0)
return;
@ -74,7 +73,7 @@ namespace Content.Client._Sunrise.Paint
}
}
private void OnEquipmentVisualsUpdated(EntityUid uid, PaintedComponent component, EquipmentVisualsUpdatedEvent args)
private void OnEquipmentVisualsUpdated(EntityUid uid, SprayPaintedComponent component, EquipmentVisualsUpdatedEvent args)
{
if (args.RevealedLayers.Count == 0)
return;
@ -92,7 +91,7 @@ namespace Content.Client._Sunrise.Paint
}
}
private void OnShutdown(EntityUid uid, PaintedComponent component, ref ComponentShutdown args)
private void OnShutdown(EntityUid uid, SprayPaintedComponent component, ref ComponentShutdown args)
{
if (!TryComp(uid, out SpriteComponent? sprite))
return;

View file

@ -321,7 +321,7 @@ public sealed partial class SponsorTierEntry : Control
var species = markingProto.SpeciesRestrictions is { Count: > 0 }
? markingProto.SpeciesRestrictions[0]
: SharedHumanoidAppearanceSystem.DefaultSpecies;
: (string)SharedHumanoidAppearanceSystem.DefaultSpecies;
if (!_prototypeManager.TryIndex(species, out SpeciesPrototype? speciesProto))
continue;

View file

@ -1,4 +1,5 @@
using Robust.Client.UserInterface;
using System.Numerics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
namespace Content.Client._Sunrise.UserInterface.Controls;

View file

@ -4,7 +4,6 @@ using Content.Server.Advertise.EntitySystems;
using Content.Shared.Advertise.Components;
using Content.Shared.Arcade;
using Content.Server.Advertise;
using Content.Server.Advertise.Components;
using Content.Shared._Sunrise.Mood;
using Content.Shared.Power;
using Robust.Server.GameObjects;

View file

@ -68,7 +68,7 @@ namespace Content.Server.Bible
{
Timer.Spawn(500, () =>
{
_stun.TryParalyze(args.Container.Owner, TimeSpan.FromSeconds(10), true);
_stun.TryAddParalyzeDuration(args.Container.Owner, TimeSpan.FromSeconds(10));
_damageableSystem.TryChangeDamage(args.Container.Owner, component.DamageOnUnholyUse);
_audio.PlayPvs(component.SizzleSoundPath, args.Container.Owner);
});

View file

@ -14,7 +14,6 @@ using Content.Server.Objectives.Components;
using Content.Server.Light.Components;
using Content.Shared.Eye.Blinding.Systems;
using Content.Shared.Eye.Blinding.Components;
using Content.Server.Flash.Components;
using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Stealth.Components;
using Content.Shared.Damage.Components;
@ -22,6 +21,7 @@ using Content.Server.Radio.Components;
using Content.Shared._Sunrise.CollectiveMind;
using Content.Shared._RMC14.Xenonids.Screech;
using Content.Shared.Coordinates;
using Content.Shared.Flash.Components;
namespace Content.Server.Changeling;
@ -342,7 +342,7 @@ public sealed partial class ChangelingSystem : EntitySystem
DoScreech(uid, comp);
var power = comp.ShriekPower;
_flash.FlashArea(uid, uid, power, power * 2f * 1000f);
_flash.FlashArea(uid, uid, power, TimeSpan.FromSeconds(5));
var lookup = _lookup.GetEntitiesInRange(uid, power);
var lights = GetEntityQuery<PoweredLightComponent>();

View file

@ -194,8 +194,7 @@ public sealed partial class ChangelingSystem : EntitySystem
// vomit blood
if (random == 1)
{
if (TryComp<StatusEffectsComponent>(uid, out var status))
_stun.TrySlowdown(uid, TimeSpan.FromSeconds(1.5f), true, 0.5f, 0.5f, status);
_stun.TryAddKnockdownDuration(uid, TimeSpan.FromSeconds(1.5f));
var solution = new Solution();

View file

@ -1,5 +1,6 @@
using System.Collections.Frozen;
using Content.Server.Popups;
using Content.Shared._Sunrise.Animations;
using Content.Shared.Chat;
using Content.Shared.Chat.Prototypes;
using Content.Shared.Emoting;
@ -13,8 +14,6 @@ namespace Content.Server.Chat.Systems;
// emotes using emote prototype
public partial class ChatSystem
{
[Dependency] private readonly PopupSystem _popupSystem = default!;
private FrozenDictionary<string, EmotePrototype> _wordEmoteDict = FrozenDictionary<string, EmotePrototype>.Empty;
protected override void OnPrototypeReload(PrototypesReloadedEventArgs obj)
@ -104,7 +103,7 @@ public partial class ChatSystem
var ev = new AnimationEmoteAttemptEvent(source, emote);
RaiseLocalEvent(source, ev, true);
if (ev.Cancelled)
return;
return false;
}
// Sunrise-End

View file

@ -975,7 +975,7 @@ public sealed partial class ChatSystem : SharedChatSystem
return message;
}
public static readonly ProtoId<ReplacementAccentPrototype> ChatSanitize_Accent = "chatsanitize_sunrise"; // Sunrise-Edit
public static readonly ProtoId<ReplacementAccentPrototype> ChatSanitizeAccent = "chatsanitize_sunrise"; // Sunrise-Edit
public string SanitizeMessageReplaceWords(string message)
{

View file

@ -10,6 +10,7 @@ using Content.Shared.Preferences;
using Content.Shared.Preferences.Loadouts;
using Content.Shared.Roles;
using Content.Shared.Station;
using Content.Sunrise.Interfaces.Shared;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
@ -22,6 +23,13 @@ public sealed class OutfitSystem : EntitySystem
[Dependency] private readonly HandsSystem _handSystem = default!;
[Dependency] private readonly InventorySystem _invSystem = default!;
[Dependency] private readonly SharedStationSpawningSystem _spawningSystem = default!;
private ISharedSponsorsManager? _sponsorsManager; // Sunrise-Sponsors
public override void Initialize()
{
base.Initialize();
IoCManager.Instance!.TryResolveType(out _sponsorsManager); // Sunrise-Sponsors
}
public bool SetOutfit(EntityUid target, string gear, Action<EntityUid, EntityUid>? onEquipped = null)
{
@ -97,7 +105,17 @@ public sealed class OutfitSystem : EntitySystem
{
// If they don't have a loadout for the role, make a default one
roleLoadout = new RoleLoadout(jobProtoId);
roleLoadout.SetDefault(profile, session, _prototypeManager);
// Sunrise-Start
string [] sponsorsPrototypes = [];
if (_sponsorsManager != null && session != null)
{
if (_sponsorsManager.TryGetPrototypes(session.UserId, out var prototypes))
{
sponsorsPrototypes = prototypes.ToArray();
}
}
// Sunrise-End
roleLoadout.SetDefault(profile, session, _prototypeManager, sponsorsPrototypes);
}
// Equip the target with the job loadout

View file

@ -21,7 +21,6 @@ public sealed class GameMapManager : IGameMapManager
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IResourceManager _resMan = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[ViewVariables(VVAccess.ReadOnly)]
private readonly Queue<string> _previousMaps = new();
@ -111,7 +110,7 @@ public sealed class GameMapManager : IGameMapManager
public void AddExcludedMap(string mapId)
{
if (!_cfg.GetCVar(SunriseCCVars.ExcludeMaps))
if (!_configurationManager.GetCVar(SunriseCCVars.ExcludeMaps))
return;
_excludedMaps.Add(mapId);

View file

@ -69,8 +69,8 @@ public sealed class ProduceMaterialExtractorSystem : EntitySystem
if (changed == 0)
{
_popup.PopupEntity(Loc.GetString("material-extractor-comp-wrongreagent", ("used", args.Used)), args.User, args.User);
return;
_popup.PopupEntity(Loc.GetString("material-extractor-comp-wrongreagent", ("used", used)), ent);
return false;
}
_materialStorage.TryChangeMaterialAmount(ent, ent.Comp.ExtractedMaterial, changed);

View file

@ -273,9 +273,10 @@ public sealed partial class MechSystem : SharedMechSystem
return;
}
if (TryComp<HandsComponent>(args.Args.User, out var handsComponent))
foreach (var hand in _hands.EnumerateHands(args.Args.User, handsComponent))
_hands.DoDrop(args.Args.User, hand, true, handsComponent);
foreach (var hand in _hands.EnumerateHands(args.Args.User))
{
_hands.DoDrop(args.Args.User, hand);
}
_factionSystem.Up(args.Args.User, uid);
TryInsert(uid, args.Args.User, component);

View file

@ -1,7 +1,6 @@
using Content.Server.Bible.Components;
using Content.Server.Body.Components;
using Content.Server.Flash;
using Content.Server.Flash.Components;
using Content.Server.Speech.Components;
using Content.Server.Storage.Components;
using Content.Server.Objectives.Components;
@ -32,6 +31,8 @@ using Robust.Shared.Containers;
using Robust.Shared.Utility;
using System.Collections.Frozen;
using System.Diagnostics.CodeAnalysis;
using Content.Shared.Flash;
using Content.Shared.Flash.Components;
namespace Content.Server.Vampire;
@ -393,7 +394,7 @@ public sealed partial class VampireSystem
if (HasComp<HumanoidAppearanceComponent>(entity))
{
_stun.TryParalyze(entity, duration ?? TimeSpan.FromSeconds(3), false);
_stun.TryAddParalyzeDuration(entity, duration ?? TimeSpan.FromSeconds(3));
_chat.TryEmoteWithoutChat(entity, _prototypeManager.Index<EmotePrototype>(VampireComponent.ScreamEmoteProto), true);
}
@ -414,14 +415,14 @@ public sealed partial class VampireSystem
if (HasComp<BibleUserComponent>(target))
{
_stun.TryParalyze(vampire, duration ?? TimeSpan.FromSeconds(3), true);
_stun.TryAddParalyzeDuration(vampire, duration ?? TimeSpan.FromSeconds(3));
_chat.TryEmoteWithoutChat(vampire.Owner, _prototypeManager.Index<EmotePrototype>(VampireComponent.ScreamEmoteProto), true);
if (damage != null)
_damageableSystem.TryChangeDamage(vampire.Owner, damage);
return;
}
_stun.TryParalyze(target.Value, duration ?? TimeSpan.FromSeconds(3), true);
_stun.TryAddParalyzeDuration(target.Value, duration ?? TimeSpan.FromSeconds(3));
}
private void PolymorphSelf(Entity<VampireComponent> vampire, string? polymorphTarget)
{
@ -532,7 +533,7 @@ public sealed partial class VampireSystem
return false;
var attempt = new FlashAttemptEvent(target.Value, vampire.Owner, vampire.Owner);
RaiseLocalEvent(target.Value, attempt, true);
RaiseLocalEvent(target.Value, ref attempt, true);
if (attempt.Cancelled)
return false;

View file

@ -43,13 +43,11 @@ namespace Content.Server.Zombies
[Dependency] private readonly BloodstreamSystem _bloodstream = default!;
[Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly ChatSystem _chat = default!;
[Dependency] private readonly ActionsSystem _actions = default!;
[Dependency] private readonly AutoEmoteSystem _autoEmote = default!;
[Dependency] private readonly EmoteOnDamageSystem _emoteOnDamage = default!;
[Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedRoleSystem _role = default!;
[Dependency] private readonly ChatSystem _chatSystem = default!;
[Dependency] private readonly ThrowingSystem _throwing = default!;
[Dependency] private readonly ActionsSystem _action = default!;
[Dependency] private readonly SharedStunSystem _stun = default!;
@ -109,7 +107,7 @@ namespace Content.Server.Zombies
if (!_mobState.IsAlive(args.Target))
return;
_stun.TryParalyze(args.Target, TimeSpan.FromSeconds(component.ParalyzeTime), false);
_stun.TryAddParalyzeDuration(args.Target, TimeSpan.FromSeconds(component.ParalyzeTime));
_damageable.TryChangeDamage(args.Target, component.Damage, origin: args.Thrown);
}
@ -197,13 +195,13 @@ namespace Content.Server.Zombies
}
_throwing.TryThrow(uid, direction, 7F, uid, 10F);
_chatSystem.TryEmoteWithChat(uid, "ZombieGroan");
_chat.TryEmoteWithChat(uid, "ZombieGroan");
}
// Sunnrise-End
private void OnPendingMapInit(EntityUid uid, IncurableZombieComponent component, MapInitEvent args)
{
_actions.AddAction(uid, ref component.Action, component.ZombifySelfActionPrototype);
_action.AddAction(uid, ref component.Action, component.ZombifySelfActionPrototype);
_faction.AddFaction(uid, Faction);
if (HasComp<ZombieComponent>(uid) || HasComp<ZombieImmuneComponent>(uid))
@ -293,10 +291,6 @@ namespace Content.Server.Zombies
private void OnStartup(EntityUid uid, ZombieComponent component, ComponentStartup args)
{
if (component.EmoteSoundsId == null)
return;
_protoManager.TryIndex(component.EmoteSoundsId, out component.EmoteSounds);
// Sunnrise-Start
_action.AddAction(uid, component.ActionJumpId);
_action.AddAction(uid, component.ActionFlairId);

View file

@ -8,6 +8,7 @@ using Content.Shared.FixedPoint;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared._Starlight.Actions.Stasis;
using Content.Shared.Body.Components;
using Robust.Shared.Player;
namespace Content.Server._Starlight.Actions.Stasis;

View file

@ -21,7 +21,6 @@ public sealed partial class LimbSystem : SharedLimbSystem
[Dependency] private readonly ContainerSystem _containers = default!;
[Dependency] private readonly BodySystem _body = default!;
[Dependency] private readonly HandsSystem _hands = default!;
[Dependency] private readonly IPrototypeManager _prototypes = default!;
[Dependency] private readonly HumanoidAppearanceSystem _humanoidAppearanceSystem = default!;
[Dependency] private readonly MetaDataSystem _metadata = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;

View file

@ -27,7 +27,6 @@ public sealed partial class SurgerySystem : SharedSurgerySystem
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly UserInterfaceSystem _ui = default!;
[Dependency] private readonly ContainerSystem _containers = default!;
[Dependency] private readonly StarlightEntitySystem _entitySystem = default!;
private readonly List<EntProtoId> _surgeries = [];
public override void Initialize()
@ -72,7 +71,7 @@ public sealed partial class SurgerySystem : SharedSurgerySystem
foreach (var surgery in _surgeries)
{
if (!_entitySystem.TryGetSingleton(surgery, out var surgeryEnt)
if (!_entity.TryGetSingleton(surgery, out var surgeryEnt)
|| !TryComp(surgeryEnt, out SurgeryComponent? surgeryComp)
|| (surgeryComp.Requirement.Count() > 0 && !progress.CompletedSurgeries.Any(x => surgeryComp.Requirement.Contains(x))))
continue;
@ -80,7 +79,7 @@ public sealed partial class SurgerySystem : SharedSurgerySystem
var ev = new SurgeryValidEvent(body, part);
var isCompleted = progress.CompletedSurgeries.Contains(surgery);
if (!progress.StartedSurgeries.Contains(surgery)
if (!progress.StartedSurgeries.Contains(surgery)
&& !isCompleted)
{
RaiseLocalEvent(surgeryEnt, ref ev);

View file

@ -30,8 +30,6 @@ using Content.Server.Speech.Components;
using Content.Server.Humanoid;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Coordinates;
using Discord.Rest;
using Content.Shared._Sunrise.Felinid;
namespace Content.Server._Sunrise.Antags.Abductor;
@ -136,7 +134,7 @@ public sealed partial class AbductorSystem : SharedAbductorSystem
case AbductorOrganType.Owo:
if (curTime > victim.TransformationTime)
{
if (HasComp<FelinidComponent>(uid))
if (HasComp<OwOAccentComponent>(uid))
return;
EnsureComp<AbductorOwoTransformatedComponent>(uid);
_popup.PopupEntity(Loc.GetString("owo-organ-transformation"), uid, PopupType.LargeCaution);

View file

@ -150,7 +150,7 @@ public sealed class BloodCultWeaponSystem : EntitySystem
if (HasComp<BloodCultistComponent>(args.User))
return;
_stunSystem.TryParalyze(args.User, TimeSpan.FromSeconds(component.StuhTime), true);
_stunSystem.TryAddParalyzeDuration(args.User, TimeSpan.FromSeconds(component.StuhTime));
_damageableSystem.TryChangeDamage(args.User, component.Damage, origin: uid);
}
}

View file

@ -120,8 +120,8 @@ public sealed class CultBloodSpearSystem : EntitySystem
else
{
if (HasComp<MobStateComponent>(args.Target))
{
_stunSystem.TryParalyze(args.Target, TimeSpan.FromSeconds(component.StuhTime), true);
_stunSystem.TryAddParalyzeDuration(args.Target, TimeSpan.FromSeconds(component.StuhTime));
_damageableSystem.TryChangeDamage(args.Target, component.Damage, origin: uid);
_audio.PlayPvs(component.BreakSound, uid);
QueueDel(uid);

View file

@ -6,6 +6,7 @@ using Content.Server.Hands.Systems;
using Content.Server.Popups;
using Content.Shared._Sunrise.BloodCult.Components;
using Content.Shared._Sunrise.BloodCult.Items;
using Content.Shared.Body.Components;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Damage;

View file

@ -11,6 +11,7 @@ using Content.Shared._Sunrise.BloodCult.Components;
using Content.Shared._Sunrise.BloodCult.Items;
using Content.Shared._Sunrise.Events;
using Content.Shared.Blocking;
using Content.Shared.Body.Events;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.Hands.EntitySystems;

View file

@ -11,6 +11,7 @@ using Content.Server.Shuttles.Systems;
using Content.Server.Sunrise.Paws;
using Content.Shared._Sunrise.Boss.Components;
using Content.Shared._Sunrise.Boss.Systems;
using Content.Shared.Body.Events;
using Content.Shared.Construction;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.ForceSay;

View file

@ -1,7 +1,4 @@
using Content.Server.Advertise.Components;
using Content.Server.Chat.Systems;
using Content.Server.Power.Components;
using Content.Shared.VendingMachines;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;

View file

@ -12,6 +12,7 @@ using Content.Shared.Mobs;
using Content.Shared.Mobs.Systems;
using Content.Shared.Popups;
using Content.Shared.Tag;
using Content.Shared.Trigger.Systems;
using Robust.Server.Audio;
namespace Content.Server._Sunrise.ExpCollars;

View file

@ -1,7 +1,6 @@
using System.Linq;
using Content.Server.Atmos.Components;
using Content.Server.Body.Components;
using Content.Server.Flash.Components;
using Content.Server.Forensics;
using Content.Server.Temperature.Components;
using Content.Shared._Sunrise.NightVision.Components;
@ -9,11 +8,13 @@ using Content.Shared._Sunrise.CollectiveMind;
using Content.Shared._Sunrise.FleshCult;
using Content.Shared.Actions;
using Content.Shared.Actions.Components;
using Content.Shared.Body.Components;
using Content.Shared.Body.Part;
using Content.Shared.Chemistry.Components;
using Content.Shared.Cuffs.Components;
using Content.Shared.Electrocution;
using Content.Shared.FixedPoint;
using Content.Shared.Flash.Components;
using Content.Shared.Forensics.Components;
using Content.Shared.Humanoid;
using Content.Shared.Interaction.Components;
@ -90,11 +91,12 @@ public sealed partial class FleshCultSystem
private void HandleCriticalState(EntityUid uid, FleshCultistComponent component)
{
EnsureComp<CuffableComponent>(uid);
foreach (var hand in _handsSystem.EnumerateHands(uid).Where(hand => hand.Container != null))
foreach (var hand in _handsSystem.EnumerateHands(uid))
{
foreach (var entity in hand.Container!.ContainedEntities.Where(entity => !HasComp<FleshHandModComponent>(entity)))
var item = _handsSystem.GetHeldItem((uid, null), hand);
if (HasComp<FleshHandModComponent>(item))
{
QueueDel(entity);
QueueDel(item);
_audioSystem.PlayPvs(component.SoundMutation, uid, component.SoundMutation.Params);
}
}
@ -214,7 +216,6 @@ public sealed partial class FleshCultSystem
RemCompDeferred<FlashImmunityComponent>(uid);
RemCompDeferred<RespiratorImmunityComponent>(uid);
RemCompDeferred<PressureImmunityComponent>(uid);
RemCompDeferred<FlashImmunityComponent>(uid);
}
private void RemoveCollectiveMind(EntityUid uid)

View file

@ -5,6 +5,7 @@ using Content.Server.Shuttles.Systems;
using Content.Server.Station.Components;
using Content.Server.Station.Events;
using Content.Server.Station.Systems;
using Content.Shared.Station.Components;
using Robust.Shared.EntitySerialization.Systems;
namespace Content.Server._Sunrise.GridDock;
@ -36,7 +37,10 @@ public sealed class GridDockSystem : EntitySystem
if (!TryComp<ShuttleComponent>(rootUid.Value.Owner, out var shuttleComp))
return;
var target = _station.GetLargestGrid(Comp<StationDataComponent>(uid));
if (!TryComp<StationDataComponent>(uid, out var stationData))
return;
var target = _station.GetLargestGrid((uid, stationData));
if (target == null)
{

View file

@ -4,6 +4,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Station.Components;
using Content.Shared._Sunrise.Helpers;
using Content.Shared.Random.Helpers;
using Content.Shared.Station.Components;
using Robust.Server.GameObjects;
using Robust.Shared.Collections;
using Robust.Shared.Map;

View file

@ -1,4 +1,5 @@
using Content.Server.Speech;
using Content.Shared.Speech;
using Robust.Shared.Random;
namespace Content.Server._Sunrise.Misc.ShiftedAsciiTableAccent;

View file

@ -12,9 +12,6 @@ using Content.Shared.Verbs;
using Content.Shared.Whitelist;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Utility;
using PaintComponent = Content.Shared._Sunrise.Paint.PaintComponent;
using PaintDoAfterEvent = Content.Shared._Sunrise.Paint.PaintDoAfterEvent;
using PaintedComponent = Content.Shared._Sunrise.Paint.PaintedComponent;
namespace Content.Server._Sunrise.Paint;
@ -103,7 +100,7 @@ public sealed class PaintSystem : SharedPaintSystem
return;
}
if (HasComp<PaintedComponent>(target) || HasComp<RandomSpriteComponent>(target))
if (HasComp<SprayPaintedComponent>(target) || HasComp<RandomSpriteComponent>(target))
{
_popup.PopupEntity(Loc.GetString("paint-failure-painted", ("target", args.Target)), args.User, args.User, PopupType.Medium);
return;
@ -118,7 +115,7 @@ public sealed class PaintSystem : SharedPaintSystem
if (TryPaint(entity, target))
{
EnsureComp<PaintedComponent>(target, out PaintedComponent? paint);
EnsureComp<SprayPaintedComponent>(target, out SprayPaintedComponent? paint);
EnsureComp<AppearanceComponent>(target);
paint.Color = entity.Comp.Color; // set the target color to the color specified in the spray paint yml.
@ -137,7 +134,7 @@ public sealed class PaintSystem : SharedPaintSystem
if (slotEnt == null)
return;
if (HasComp<PaintedComponent>(slotEnt.Value) || entity.Comp.Blacklist != null &&
if (HasComp<SprayPaintedComponent>(slotEnt.Value) || entity.Comp.Blacklist != null &&
_whitelist.IsValid(entity.Comp.Blacklist,
slotEnt.Value)
|| HasComp<RandomSpriteComponent>(slotEnt.Value) ||
@ -145,7 +142,7 @@ public sealed class PaintSystem : SharedPaintSystem
slotEnt.Value))
return;
EnsureComp<PaintedComponent>(slotEnt.Value, out PaintedComponent? slotpaint);
EnsureComp<SprayPaintedComponent>(slotEnt.Value, out SprayPaintedComponent? slotpaint);
EnsureComp<AppearanceComponent>(slotEnt.Value);
slotpaint.Color = entity.Comp.Color;
_appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true);

View file

@ -28,7 +28,6 @@ public sealed class PlanetPrisonStationSystem : EntitySystem
[Dependency] private readonly IChatManager _chat = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly MapSystem _map = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly GameTicker _gameTicker = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly BiomeSystem _biomeSystem = default!;
@ -96,7 +95,7 @@ public sealed class PlanetPrisonStationSystem : EntitySystem
return;
}
if (!_prototypeManager.TryIndex<GameMapPrototype>(station, out var gameMap))
if (!_protoManager.TryIndex<GameMapPrototype>(station, out var gameMap))
{
_sawmill.Warning("No Prison map found, skipping setup.");
return;

View file

@ -1,6 +1,7 @@
using Content.Shared.Chat.Prototypes;
using Content.Shared.Humanoid;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
namespace Content.Server._Sunrise.ReplacementVocal;
@ -13,11 +14,11 @@ namespace Content.Server._Sunrise.ReplacementVocal;
public sealed partial class ReplacementVocalComponent : Component
{
[DataField(customTypeSerializer: typeof(PrototypeIdValueDictionarySerializer<Sex, EmoteSoundsPrototype>), required: true)]
public Dictionary<Sex, string> Vocal;
public Dictionary<Sex, ProtoId<EmoteSoundsPrototype>> Vocal;
[DataField]
public HashSet<string> AddedEmotes = new();
[DataField(customTypeSerializer: typeof(PrototypeIdValueDictionarySerializer<Sex, EmoteSoundsPrototype>))]
public Dictionary<Sex, string>? PreviousVocal;
public Dictionary<Sex, ProtoId<EmoteSoundsPrototype>>? PreviousVocal;
}

View file

@ -31,7 +31,10 @@ public sealed class ReplacementVocalSystem : EntitySystem
LoadEmotes(uid, vocalComponent);
foreach (var emote in vocalComponent.EmoteSounds!.Sounds.Keys)
if (!_proto.TryIndex(vocalComponent.EmoteSounds, out var soundIndex))
return;
foreach (var emote in soundIndex.Sounds.Keys)
{
if (speechComponent.AllowedEmotes.Contains(emote))
continue;

View file

@ -9,6 +9,7 @@ using Content.Server.Station.Components;
using Content.Server.Station.Events;
using Content.Server.Station.Systems;
using Content.Shared.Shuttles.Components;
using Content.Shared.Station.Components;
using Robust.Server.GameObjects;
using Robust.Shared.EntitySerialization;
using Robust.Shared.EntitySerialization.Systems;
@ -89,7 +90,10 @@ public sealed class CodeEquipmentSystem : EntitySystem
if (ev.AlertLevel != comp.TargetCode)
return;
var target = _station.GetLargestGrid(Comp<StationDataComponent>(ev.Station));
if (!TryComp<StationDataComponent>(ev.Station, out var stationData))
return;
var target = _station.GetLargestGrid((ev.Station, stationData));
if (target == null)
return;

View file

@ -3,6 +3,7 @@ using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Server.Speech.Components;
using Content.Server.Speech.EntitySystems;
using Content.Shared.Speech;
namespace Content.Server._Sunrise.Speech.EntitySystems;

View file

@ -3,6 +3,7 @@ using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Server.Speech.Components;
using Content.Server.Speech.EntitySystems;
using Content.Shared.Speech;
namespace Content.Server._Sunrise.Speech.EntitySystems;

View file

@ -3,6 +3,7 @@ using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Server.Speech.Components;
using Content.Server.Speech.EntitySystems;
using Content.Shared.Speech;
namespace Content.Server._Sunrise.Speech.EntitySystems;

View file

@ -1,5 +1,6 @@
using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Shared.Speech;
using Robust.Shared.Random;
namespace Content.Server._Sunrise.Speech.EntitySystems;

View file

@ -3,6 +3,8 @@ using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Server.Speech.Components;
using Content.Server.Speech.EntitySystems;
using Content.Shared.Speech;
namespace Content.Server._Sunrise.Speech.EntitySystems;
public sealed class TransliterationAccentSystem : EntitySystem
{
@ -116,7 +118,7 @@ public sealed class TransliterationAccentSystem : EntitySystem
'n' => 'т',
'm' => 'ь',
',' => 'б',
'`' => 'ё',
'`' => 'ё',
'Q' => 'Й',
'W' => 'Ц',
'E' => 'У',
@ -159,4 +161,4 @@ public sealed class TransliterationAccentSystem : EntitySystem
{
args.Message = Accentuate(args.Message);
}
}
}

View file

@ -3,6 +3,7 @@ using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Server.Speech.Components;
using Content.Server.Speech.EntitySystems;
using Content.Shared.Speech;
namespace Content.Server._Sunrise.Speech.EntitySystems;

View file

@ -1,6 +1,7 @@
using System.Text.RegularExpressions;
using Content.Server._Sunrise.Speech.Components;
using Content.Server.Speech;
using Content.Shared.Speech;
using Robust.Shared.Random;
namespace Content.Server._Sunrise.Speech.EntitySystems;

View file

@ -2,6 +2,7 @@ using Content.Server.Explosion.EntitySystems;
using Content.Server.Fluids.EntitySystems;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Trigger;
using JetBrains.Annotations;
namespace Content.Server._Sunrise.SplashOnTrigger;

View file

@ -1,5 +1,6 @@
using System.Text.RegularExpressions;
using Content.Server.Speech.Components;
using Content.Shared.Speech;
using Robust.Shared.Random;
namespace Content.Server.Speech.EntitySystems

View file

@ -121,7 +121,7 @@ public sealed class VigersRaySystem : EntitySystem
var statusEffectQuery = EntityQueryEnumerator<StatusEffectsComponent>();
while (statusEffectQuery.MoveNext(out var ent, out var comp))
{
_stunSystem.TryParalyze(ent, TimeSpan.FromSeconds(5), true);
_stunSystem.TryAddParalyzeDuration(ent, TimeSpan.FromSeconds(5));
_jittering.DoJitter(ent, TimeSpan.FromSeconds(15), true);
_stuttering.DoStutter(ent, TimeSpan.FromSeconds(30), true);
}

View file

@ -18,6 +18,7 @@ using Content.Shared.Slippery;
using Content.Shared.Sound;
using Content.Shared.Sound.Components;
using Content.Shared.Speech;
using Content.Shared.Standing;
using Content.Shared.StatusEffectNew;
using Content.Shared.Stunnable;
using Content.Shared.Traits.Assorted;
@ -40,6 +41,7 @@ public sealed partial class SleepingSystem : EntitySystem
[Dependency] private readonly SharedEmitSoundSystem _emitSound = default!;
[Dependency] private readonly StatusEffectsSystem _statusEffect = default!;
[Dependency] private readonly SharedStunSystem _stun = default!;
[Dependency] private readonly SharedStandingStateSystem _standing = default!;
public static readonly EntProtoId SleepActionId = "ActionSleep";
public static readonly EntProtoId WakeActionId = "ActionWake";
@ -129,7 +131,7 @@ public sealed partial class SleepingSystem : EntitySystem
}
_stun.TryUnstun(ent.Owner);
_stun.TryStanding(ent.Owner);
_standing.TryStandUp(ent.Owner);
RemComp<SpamEmitSoundComponent>(ent);
}

View file

@ -37,7 +37,7 @@ public sealed class PlantAnalyzerLocalizationHelper
return ContentLocalizationManager.FormatList(locStrings);
}
public static (string Singular, string Plural) ProduceToLocalizedStrings(List<string> ids, IPrototypeManager protMan)
public static (string Singular, string Plural) ProduceToLocalizedStrings(List<EntProtoId> ids, IPrototypeManager protMan)
{
if (ids.Count == 0)
return ("", "");
@ -46,7 +46,7 @@ public sealed class PlantAnalyzerLocalizationHelper
List<string> pluralStrings = [];
foreach (var id in ids)
{
var singular = protMan.TryIndex<EntityPrototype>(id, out var prototype) ? prototype.Name : id;
var singular = protMan.TryIndex(id, out var prototype) ? prototype.Name : id.Id;
var plural = Loc.GetString("plant-analyzer-produce-plural", ("thing", singular));
singularStrings.Add(singular);

View file

@ -1,4 +1,5 @@
using Content.Shared.Atmos;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Botany.PlantAnalyzer;
@ -72,12 +73,12 @@ public sealed class PlantAnalyzerPlantData(string seedDisplayName, float health,
/// Information about the output of a plant (produce and gas).
/// </summary>
[Serializable, NetSerializable]
public sealed class PlantAnalyzerProduceData(int yield, float potency, List<string> chemicals, List<string> produce, List<Gas> exudeGasses, bool seedless)
public sealed class PlantAnalyzerProduceData(int yield, float potency, List<string> chemicals, List<EntProtoId> produce, List<Gas> exudeGasses, bool seedless)
{
public int Yield = yield;
public string Potency = ObscurePotency(potency);
public List<string> Chemicals = chemicals;
public List<string> Produce = produce;
public List<EntProtoId> Produce = produce;
public List<Gas> ExudeGasses = exudeGasses;
public bool Seedless = seedless;

View file

@ -1,9 +0,0 @@
using Content.Shared.Roles;
namespace Content.Shared.Changeling;
/// <summary>
/// The Mindrole for Changeling Antags
/// </summary>
[RegisterComponent]
public sealed partial class ChangelingRoleComponent : BaseMindRoleComponent;

View file

@ -25,11 +25,6 @@ public abstract class SharedChatSystem : EntitySystem
public const char WhisperPrefix = ',';
public const char DefaultChannelKey = 'р'; // Russian-Localization
public const char CollectiveMindPrefix = '+'; // Sunrise-Edit
// Sunrise-TTS-Start
public const int VoiceRange = 10; // how far voice goes in world units
public const int WhisperClearRange = 2; // how far whisper goes while still being understandable, in world units
public const int WhisperMuffledRange = 5; // how far whisper goes at all, in world units
// Sunrise-TTS-End
public const int VoiceRange = 10; // how far voice goes in world units
public const int WhisperClearRange = 2; // how far whisper goes while still being understandable, in world units

View file

@ -3,6 +3,7 @@ using Content.Shared.DoAfter; // Sunrise-Edit
using Content.Shared.FixedPoint;
using Robust.Shared.GameStates;
using Robust.Shared.Audio;
using Robust.Shared.Serialization;
namespace Content.Shared.Chemistry.Components;
@ -52,7 +53,7 @@ public sealed partial class HyposprayComponent : Component
/// </summary>
[DataField]
public bool InjectOnly = false;
// Sunrise-Start
/// <summary>
@ -72,4 +73,4 @@ public sealed partial class HyposprayComponent : Component
public sealed partial class HyposprayDoAfterEvent : SimpleDoAfterEvent
{
// Sunrise-End
}
}

View file

@ -1,5 +1,5 @@
using Content.Server._Sunrise.SolutionRegenerationSwitcher;
using Content.Server.Chemistry.EntitySystems;
using Content.Shared._Sunrise.SolutionRegenerationSwitcher;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Reagent;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;

View file

@ -16,12 +16,6 @@ using Content.Shared.Timing;
using Content.Shared.Verbs;
using Content.Shared.Weapons.Melee.Events;
using Robust.Shared.Audio.Systems;
using Content.Server.Interaction;
using Content.Server.Body.Components;
using Robust.Shared.GameStates;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Robust.Server.Audio;
// Sunrise-Start
using Robust.Shared.Prototypes;
using Content.Shared.Chemistry.Reagent;
@ -119,7 +113,7 @@ public sealed class HypospraySystem : EntitySystem
{
// if target is ineligible but is a container, try to draw from the container if allowed
if (entity.Comp.CanContainerDraw
&& !EligibleEntity(target, EntityManager, entity)
&& !EligibleEntity(target, entity.Comp)
&& _solutionContainers.TryGetDrawableSolution(target, out var drawableSolution, out _))
{
return TryDraw(entity, target, drawableSolution.Value, user);
@ -205,18 +199,6 @@ public sealed class HypospraySystem : EntitySystem
else if (target == user)
msgFormat = "hypospray-component-inject-self-message";
if (!_solutionContainers.TryGetSolution(uid, component.SolutionName, out var hypoSpraySoln, out var hypoSpraySolution) || hypoSpraySolution.Volume == 0)
{
_popup.PopupClient(Loc.GetString("hypospray-component-empty-message"), target, user);
return true;
}
if (!_solutionContainers.TryGetInjectableSolution(target, out var targetSoln, out var targetSolution))
{
_popup.PopupClient(Loc.GetString("hypospray-cant-inject", ("target", Identity.Entity(target, EntityManager))), target, user);
return false;
}
// Sunrise-Start
if (!InjectionFailureCheck(entity, target, user, out var hypoSpraySoln, out var targetSoln, out var targetSolution, out var returnValue)
|| hypoSpraySoln == null
@ -301,7 +283,7 @@ public sealed class HypospraySystem : EntitySystem
}
}
var removedSolution = _solutionContainers.Draw(target.Owner, targetSolution, realTransferAmount);
var removedSolution = _solutionContainers.Draw(target, targetSolution, realTransferAmount);
// Sunrise-End
if (!_solutionContainers.TryAddSolution(soln.Value, removedSolution))

View file

@ -31,7 +31,6 @@ namespace Content.Shared.Damage
[Dependency] private readonly IConfigurationManager _config = default!;
[Dependency] private readonly SharedChemistryGuideDataSystem _chemistryGuideData = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IConfigurationManager _configurationManager = default!;
private EntityQuery<AppearanceComponent> _appearanceQuery;
private EntityQuery<DamageableComponent> _damageableQuery;
@ -96,9 +95,9 @@ namespace Content.Shared.Damage
Subs.CVar(_config, CCVars.PlaytestTopicalsHealModifier, value => UniversalTopicalsHealModifier = value, true);
Subs.CVar(_config, CCVars.PlaytestMobDamageModifier, value => UniversalMobDamageModifier = value, true);
_configurationManager.OnValueChanged(SunriseCCVars.DamageVariance, UpdateVariance, true); // Sunrise-Edit
_configurationManager.OnValueChanged(SunriseCCVars.DamageModifier, UpdateDamageModifier, true); // Sunrise-Edit
_configurationManager.OnValueChanged(SunriseCCVars.HealModifier, UpdateHealModifier, true); // Sunrise-Edit
_config.OnValueChanged(SunriseCCVars.DamageVariance, UpdateVariance, true); // Sunrise-Edit
_config.OnValueChanged(SunriseCCVars.DamageModifier, UpdateDamageModifier, true); // Sunrise-Edit
_config.OnValueChanged(SunriseCCVars.HealModifier, UpdateHealModifier, true); // Sunrise-Edit
}
/// <summary>

View file

@ -251,7 +251,13 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
break;
}
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ());
//Sunrise start
var speciesPrototype = IoCManager.Resolve<IPrototypeManager>().Index<SpeciesPrototype>(species);
var newWidth = random.NextFloat(speciesPrototype.MinWidth, speciesPrototype.MaxWidth);
var newHeight = random.NextFloat(speciesPrototype.MinHeight, speciesPrototype.MaxHeight);
//Sunrise end
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new (), MarkingEffectType.Color, null, MarkingEffectType.Color, null, newWidth, newHeight);
float RandomizeColor(float channel)
{
@ -346,6 +352,7 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
// sunrise gradient end
//Sunrise start
var random = IoCManager.Resolve<IRobustRandom>();
var speciesPrototype = IoCManager.Resolve<IPrototypeManager>().Index<SpeciesPrototype>(species);
var newWidth = random.NextFloat(speciesPrototype.MinWidth, speciesPrototype.MaxWidth);
var newHeight = random.NextFloat(speciesPrototype.MinHeight, speciesPrototype.MaxHeight);
@ -363,8 +370,8 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance,
hairExtendedColor,
appearance.FacialHairMarkingEffectType,
facialHairExtendedColor,
width,
height);
newWidth,
newHeight);
}
public bool MemberwiseEquals(ICharacterAppearance maybeOther)
{

View file

@ -206,45 +206,10 @@ public sealed class SmartEquipSystem : EntitySystem
_slots.TryInsertFromHand(slotItem, toInsertTo, uid, hands, excludeUserAudio: true);
return;
// Sunrise-start
} else if (TryComp<StorageComponent>(slotItem, out var storage)) // case 2 (storage item):
{
switch (handItem)
{
case null when storage.Container.ContainedEntities.Count == 0:
_popup.PopupClient(emptyEquipmentSlotString, uid, uid);
return;
case null:
var removing = storage.Container.ContainedEntities[^1];
_container.RemoveEntity(slotItem, removing);
_hands.TryPickup(uid, removing, handsComp: hands);
return;
}
}
if (!_storage.CanInsert(slotItem, handItem.Value, out var reason))
{
if (reason != null)
_popup.PopupClient(Loc.GetString(reason), uid, uid);
return;
// Sunrise-end
}
// Sunrise-edit start
_hands.TryDrop(uid, hands.ActiveHand, handsComp: hands);
_storage.Insert(slotItem, handItem.Value, out var stacked, out _);
// if the hand item stacked with the things in inventory, but there's no more space left for the rest
// of the stack, place the stack back in hand rather than dropping it on the floor
if (stacked != null && !_storage.CanInsert(slotItem, handItem.Value, out _))
{
if (TryComp<StackComponent>(handItem.Value, out var handStack) && handStack.Count > 0)
_hands.TryPickup(uid, handItem.Value, handsComp: hands);
}
return;
} else if (handItem != null) // case 4 (just an item):
// Sunrise-edit-end
// case 4 (just an item):
if (handItem != null)
return;
if (!_inventory.CanUnequip(uid, equipmentSlot, out var inventoryReason))

View file

@ -5,12 +5,9 @@ using Content.Shared.Examine;
using Content.Shared.Item.ItemToggle.Components;
using Content.Shared.Storage;
using JetBrains.Annotations;
using Robust.Shared.Collections;
using Robust.Shared.Containers;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Content.Shared._Sunrise.Felinid;
namespace Content.Shared.Item;
@ -116,10 +113,6 @@ public abstract class SharedItemSystem : EntitySystem
private void AddPickupVerb(EntityUid uid, ItemComponent component, GetVerbsEvent<InteractionVerb> args)
{
// Sunrise-start. Предотвращаем появление стандартного верба подбора для фелинидов
if (HasComp<FelinidComponent>(uid))
return;
// Sunrise-end
if (args.Hands == null ||
args.Using != null ||
!args.CanAccess ||

View file

@ -1,3 +1,4 @@
using Content.Shared.Chemistry.Reagent;
using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes;
using Robust.Shared.Audio;
@ -62,4 +63,12 @@ public sealed partial class HealingComponent : Component
/// </summary>
[DataField]
public SoundSpecifier? HealingEndSound = null;
// Sunrise-Start
[DataField]
public bool SolutionDrain = false;
[DataField]
public List<ReagentQuantity> ReagentsToDrain = new();
// Sunrise-End
}

View file

@ -2,12 +2,7 @@ using Content.Shared.Administration.Logs;
using Content.Shared.Body.Components;
using Content.Shared.Body.Systems;
using System.Linq;
using Content.Server.Administration.Logs;
using Content.Server.Body.Components;
using Content.Server.Body.Systems;
using Content.Server.Medical.Components;
using Content.Server.Popups;
using Content.Server.Stack;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.Components.SolutionManager;
using Content.Shared.Chemistry.EntitySystems;
@ -221,14 +216,14 @@ public sealed class HealingSystem : EntitySystem
return false;
// Starlight start
if (component.SolutionDrain && TryComp<SolutionContainerManagerComponent>(uid, out var solutionManager))
if (healing.Comp.SolutionDrain && TryComp<SolutionContainerManagerComponent>(healing.Owner, out var solutionManager))
{
Entity<SolutionComponent>? solutionEntity = null;
if (_solutionContainerSystem.ResolveSolution(uid, "injector", ref solutionEntity, out var solution))
if (_solutionContainerSystem.ResolveSolution(healing.Owner, "injector", ref solutionEntity, out var solution))
{
if (!solution.Contents.Any(sol => component.ReagentsToDrain.Any(req => req.Reagent == sol.Reagent && sol.Quantity >= req.Quantity)))
if (!solution.Contents.Any(sol => healing.Comp.ReagentsToDrain.Any(req => req.Reagent == sol.Reagent && sol.Quantity >= req.Quantity)))
{
_popupSystem.PopupEntity(Loc.GetString("medical-item-solution-missing", ("item", uid)), uid, user);
_popupSystem.PopupEntity(Loc.GetString("medical-item-solution-missing", ("item", healing.Owner)), healing.Owner, user);
return false;
}
}

View file

@ -16,9 +16,11 @@ using JetBrains.Annotations;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Configuration;
using Robust.Shared.Containers;
using Robust.Shared.Network;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Systems;
using Robust.Shared.Physics.Events;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Utility;
@ -42,8 +44,7 @@ public sealed class SlipperySystem : EntitySystem
// Sunrise-Start
private static float _deadChance;
[ValidatePrototypeId<EmotePrototype>]
private const string EmoteFallOnNeckProto = "FallOnNeck";
private static ProtoId<EmotePrototype> EmoteFallOnNeckProto = "FallOnNeck";
// Sunrise-End
private EntityQuery<KnockedDownComponent> _knockedDownQuery;

View file

@ -14,7 +14,6 @@ using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Linq;
using PaintedComponent = Content.Shared._Sunrise.Paint.PaintedComponent; // Sunrise-edit
namespace Content.Shared.SprayPainter;

View file

@ -111,11 +111,12 @@ public abstract class SharedStandingStateSystem : EntitySystem
return;
var worldRotation = _transform.GetWorldRotation(uid).ToVec();
foreach (var hand in handsComp.Hands.Values)
foreach (var hand in handsComp.Hands.Keys)
{
if (hand.HeldEntity is not { } held)
var heldEntity = _handsSystem.GetHeldItem(uid, hand);
if (heldEntity is not { } held)
continue;
if (!_handsSystem.TryDrop(uid, hand, checkActionBlocker: false, handsComp: handsComp))
if (!_handsSystem.TryDrop(uid, hand, checkActionBlocker: false))
continue;
_throwing.TryThrow(
@ -188,7 +189,7 @@ public abstract class SharedStandingStateSystem : EntitySystem
}
var totalHands = handsComponent.Hands.Count;
var freeHands = handsComponent.CountFreeHands();
var freeHands = _handsSystem.CountFreeHands((uid, handsComponent));
var occupiedHandsRatio = (float)(totalHands - freeHands) / totalHands;
var speedModifier = baseSpeedModify * (1 - occupiedHandsRatio * 0.5f);

View file

@ -37,7 +37,6 @@ public abstract partial class SharedStunSystem
[Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly StandingStateSystem _standingState = default!;
public static readonly ProtoId<AlertPrototype> KnockdownAlert = "Knockdown";
@ -58,15 +57,11 @@ public abstract partial class SharedStunSystem
SubscribeLocalEvent<KnockedDownComponent, RefreshFrictionModifiersEvent>(OnRefreshFriction);
SubscribeLocalEvent<KnockedDownComponent, TileFrictionEvent>(OnKnockedTileFriction);
// DoAfter event subscriptions
SubscribeLocalEvent<KnockedDownComponent, TryStandDoAfterEvent>(OnStandDoAfter);
// Knockdown Extenders
SubscribeLocalEvent<KnockedDownComponent, DamageChangedEvent>(OnDamaged);
// Handling Alternative Inputs
SubscribeAllEvent<ForceStandUpEvent>(OnForceStandup);
SubscribeLocalEvent<KnockedDownComponent, KnockedDownAlertEvent>(OnKnockedDownAlert);
CommandBinds.Builder
.Bind(ContentKeyFunctions.ToggleKnockdown, InputCmdHandler.FromDelegate(HandleToggleKnockdown, handle: false))
@ -84,7 +79,7 @@ public abstract partial class SharedStunSystem
if (!knockedDown.AutoStand || knockedDown.DoAfterId.HasValue || knockedDown.NextUpdate > GameTiming.CurTime)
continue;
TryStanding(uid);
_standing.TryStandUp(uid);
}
}
@ -101,7 +96,7 @@ public abstract partial class SharedStunSystem
private void OnKnockInit(Entity<KnockedDownComponent> entity, ref ComponentInit args)
{
// Other systems should handle dropping held items...
_standingState.Down(entity, true, false);
_standing.Down(entity, true, false);
RefreshKnockedMovement(entity);
}
@ -111,7 +106,7 @@ public abstract partial class SharedStunSystem
entity.Comp.FrictionModifier = 1f;
entity.Comp.SpeedModifier = 1f;
_standingState.Stand(entity);
_standing.Stand(entity);
Alerts.ClearAlert(entity, KnockdownAlert);
}
@ -246,40 +241,10 @@ public abstract partial class SharedStunSystem
var stand = !component.DoAfterId.HasValue;
SetAutoStand(playerEnt, stand);
if (!stand || !TryStanding(playerEnt))
if (!stand || !_standing.TryStandUp(playerEnt))
CancelKnockdownDoAfter((playerEnt, component));
}
public bool TryStanding(Entity<KnockedDownComponent?, StandingStateComponent?> entity)
{
// If we aren't knocked down or can't be knocked down, then we did technically succeed in standing up
if (!Resolve(entity, ref entity.Comp1, ref entity.Comp2, false))
return true;
if (!TryStand((entity.Owner, entity.Comp1)))
return false;
var ev = new GetStandUpTimeEvent(entity.Comp2.StandTime);
RaiseLocalEvent(entity, ref ev);
var doAfterArgs = new DoAfterArgs(EntityManager, entity, ev.DoAfterTime, new TryStandDoAfterEvent(), entity, entity)
{
BreakOnDamage = true,
DamageThreshold = 5,
CancelDuplicate = true,
RequireCanInteract = false,
BreakOnHandChange = true
};
// If we try standing don't try standing again
if (!DoAfter.TryStartDoAfter(doAfterArgs, out var doAfterId))
return false;
entity.Comp1.DoAfterId = doAfterId.Value.Index;
DirtyField(entity, entity.Comp1, nameof(KnockedDownComponent.DoAfterId));
return true;
}
/// <summary>
/// A variant of <see cref="CanStand"/> used when we're actually trying to stand.
/// Main difference is this one affects autostand datafields and also displays popups.
@ -308,130 +273,12 @@ public abstract partial class SharedStunSystem
return !ev.Cancelled;
}
private bool StandingBlocked(Entity<KnockedDownComponent> entity)
{
if (!TryStand(entity))
return true;
if (!IntersectingStandingColliders(entity.Owner))
return false;
_popup.PopupClient(Loc.GetString("knockdown-component-stand-no-room"), entity, entity, PopupType.SmallCaution);
SetAutoStand(entity.Owner);
return true;
}
private void OnForceStandup(ForceStandUpEvent msg, EntitySessionEventArgs args)
{
if (args.SenderSession.AttachedEntity is not {} user)
return;
ForceStandUp(user);
}
public void ForceStandUp(Entity<KnockedDownComponent?> entity)
{
if (!Resolve(entity, ref entity.Comp, false))
return;
// That way if we fail to stand, the game will try to stand for us when we are able to
SetAutoStand(entity, true);
if (!HasComp<StandingStateComponent>(entity) || StandingBlocked((entity, entity.Comp)))
return;
if (!_hands.TryGetEmptyHand(entity.Owner, out _))
return;
if (!TryForceStand(entity.Owner))
return;
// If we have a DoAfter, cancel it
CancelKnockdownDoAfter(entity);
// Remove Component
RemComp<KnockedDownComponent>(entity);
_adminLogger.Add(LogType.Stamina, LogImpact.Medium, $"{ToPrettyString(entity):user} has force stood up from knockdown.");
}
private void OnKnockedDownAlert(Entity<KnockedDownComponent> entity, ref KnockedDownAlertEvent args)
{
if (args.Handled)
return;
// If we're already trying to stand, or we fail to stand try forcing it
if (!TryStanding(entity.Owner))
ForceStandUp((entity.Owner, entity.Comp));
args.Handled = true;
}
private bool TryForceStand(Entity<StaminaComponent?> entity)
{
// Can't force stand if no Stamina.
if (!Resolve(entity, ref entity.Comp, false))
return false;
var ev = new TryForceStandEvent(entity.Comp.ForceStandStamina);
RaiseLocalEvent(entity, ref ev);
if (!Stamina.TryTakeStamina(entity, ev.Stamina, entity.Comp, visual: true))
{
_popup.PopupClient(Loc.GetString("knockdown-component-pushup-failure"), entity, entity, PopupType.MediumCaution);
return false;
}
_popup.PopupClient(Loc.GetString("knockdown-component-pushup-success"), entity, entity);
_audio.PlayPredicted(entity.Comp.ForceStandSuccessSound, entity.Owner, entity.Owner, AudioParams.Default.WithVariation(0.025f).WithVolume(5f));
return true;
}
/// <summary>
/// Checks if standing would cause us to collide with something and potentially get stuck.
/// Returns true if we will collide with something, and false if we will not.
/// </summary>
private bool IntersectingStandingColliders(Entity<TransformComponent?> entity)
{
if (!Resolve(entity, ref entity.Comp))
return false;
var intersecting = _physics.GetEntitiesIntersectingBody(entity, StandingStateSystem.StandingCollisionLayer, false);
if (intersecting.Count == 0)
return false;
var fixtureQuery = GetEntityQuery<FixturesComponent>();
var xformQuery = GetEntityQuery<TransformComponent>();
var ourAABB = _entityLookup.GetAABBNoContainer(entity, entity.Comp.LocalPosition, entity.Comp.LocalRotation);
foreach (var ent in intersecting)
{
if (!fixtureQuery.TryGetComponent(ent, out var fixtures))
continue;
if (!xformQuery.TryComp(ent, out var xformComp))
continue;
var xform = new Transform(xformComp.LocalPosition, xformComp.LocalRotation);
foreach (var fixture in fixtures.Fixtures.Values)
{
if (!fixture.Hard || (fixture.CollisionMask & StandingStateSystem.StandingCollisionLayer) != StandingStateSystem.StandingCollisionLayer)
continue;
for (var i = 0; i < fixture.Shape.ChildCount; i++)
{
var intersection = fixture.Shape.ComputeAABB(xform, i).IntersectPercentage(ourAABB);
if (intersection > 0.1f)
return true;
}
}
}
return false;
_standing.TryStandUp(user);
}
#endregion
@ -466,25 +313,6 @@ public abstract partial class SharedStunSystem
#endregion
#region DoAfter
private void OnStandDoAfter(Entity<KnockedDownComponent> entity, ref TryStandDoAfterEvent args)
{
entity.Comp.DoAfterId = null;
if (args.Cancelled || StandingBlocked(entity))
{
DirtyField(entity, entity.Comp, nameof(KnockedDownComponent.DoAfterId));
return;
}
RemComp<KnockedDownComponent>(entity);
_adminLogger.Add(LogType.Stamina, LogImpact.Medium, $"{ToPrettyString(entity):user} has stood up from knockdown.");
}
#endregion
#region Movement and Friction
private void RefreshKnockedMovement(Entity<KnockedDownComponent> ent)

View file

@ -39,6 +39,7 @@ public abstract partial class SharedStunSystem : EntitySystem
[Dependency] protected readonly SharedDoAfterSystem DoAfter = default!;
[Dependency] protected readonly SharedStaminaSystem Stamina = default!;
[Dependency] private readonly StatusEffectsSystem _status = default!;
[Dependency] private readonly SharedStandingStateSystem _standing = default!;
public override void Initialize()
{
@ -218,7 +219,7 @@ public abstract partial class SharedStunSystem : EntitySystem
if (drop)
{
var ev = new DropHandItemsEvent();
RaiseLocalEvent(entity, ref ev);
RaiseLocalEvent(entity, ev);
}
// Only update Autostand value if it's our first time being knocked down...

View file

@ -16,7 +16,6 @@ public abstract partial class SharedGunSystem
{
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; // 🌟Starlight🌟
protected virtual void InitializeBallistic()
@ -198,13 +197,13 @@ public abstract partial class SharedGunSystem
{
var firstAmmo = component.Entities[^1];
if (TryComp<MetaDataComponent>(firstAmmo, out var meta) && meta.EntityPrototype?.ID != null &&
_prototypeManager.TryIndex<EntityPrototype>(meta.EntityPrototype.ID, out var entity))
ProtoManager.TryIndex<EntityPrototype>(meta.EntityPrototype.ID, out var entity))
{
ammoTypeName = entity.Name;
}
}
else if (component.UnspawnedCount > 0 && component.Proto != null && _prototypeManager.TryIndex(component.Proto, out EntityPrototype? proto))
else if (component.UnspawnedCount > 0 && component.Proto != null && ProtoManager.TryIndex(component.Proto, out EntityPrototype? proto))
{
ammoTypeName = proto.Name;
}

View file

@ -75,7 +75,6 @@ public abstract partial class SharedGunSystem : EntitySystem
[Dependency] protected readonly ThrowingSystem ThrowingSystem = default!;
[Dependency] private readonly UseDelaySystem _useDelay = default!;
[Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;
private const float InteractNextFire = 0.3f;
private const double SafetyNextFire = 0.5;
@ -291,7 +290,8 @@ public abstract partial class SharedGunSystem : EntitySystem
gun.ShootCoordinates = toCoordinates;
AttemptShoot(user, gunUid, gun);
gun.ShotCounter = 0;
gun.Target = target;
if (target.HasValue)
gun.Targets = new HashSet<EntityUid>{target.Value};
DirtyField(gunUid, gun, nameof(GunComponent.ShotCounter));
}

View file

@ -96,6 +96,8 @@ public sealed partial class ZombieComponent : Component
[DataField("emoteId")]
public ProtoId<EmoteSoundsPrototype>? EmoteSoundsId = "Zombie";
public EmoteSoundsPrototype? EmoteSounds;
[DataField("nextTick", customTypeSerializer:typeof(TimeOffsetSerializer))]
public TimeSpan NextTick;

View file

@ -1,4 +1,5 @@
using Content.Shared.Actions;
using Content.Shared.Chat.Prototypes;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
@ -27,3 +28,17 @@ public sealed partial class EmoteActionEvent : InstantActionEvent
[ViewVariables, DataField("emote", readOnly: true, required: true)]
public string Emote = default!;
};
public sealed class AnimationEmoteAttemptEvent : CancellableEntityEventArgs
{
public AnimationEmoteAttemptEvent(EntityUid uid, EmotePrototype emote)
{
Uid = uid;
Emote = emote;
}
public EntityUid Uid { get; }
[ViewVariables, DataField("emote", readOnly: true, required: true)]
public EmotePrototype Emote = default!;
}

View file

@ -39,7 +39,7 @@ public sealed partial class DeconvertCultist : EntityEffect
return;
args.EntityManager.System<SharedStunSystem>()
.TryParalyze(uid, TimeSpan.FromSeconds(5f), true);
.TryAddParalyzeDuration(uid, TimeSpan.FromSeconds(5f));
var target = Identity.Name(uid, args.EntityManager);
args.EntityManager.System<SharedPopupSystem>()
.PopupEntity(Loc.GetString("holy-water-started-converting", ("target", target)), uid);

View file

@ -26,7 +26,7 @@ using Content.Shared.Climbing.Events;
using Content.Shared.Buckle.Components;
using Content.Shared.Movement.Systems;
using Content.Shared.Coordinates;
using Content.Shared._Sunrise.Felinid;
using Content.Shared.Hands.EntitySystems;
namespace Content.Shared._Sunrise.Carrying;
@ -54,6 +54,8 @@ public sealed class SharedCarryingSystem : EntitySystem
[Dependency] private readonly SharedStandingStateSystem _standingState = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
public override void Initialize()
{
base.Initialize();
@ -152,7 +154,7 @@ public sealed class SharedCarryingSystem : EntitySystem
if (TryComp<MobStateComponent>(carried, out var mobState) && mobState.CurrentState != MobState.Alive)
length /= 2f;
if (length >= TimeSpan.FromSeconds(MaxCarryTime) || HasComp<FelinidComponent>(carrier))
if (length >= TimeSpan.FromSeconds(MaxCarryTime))
{
_popupSystem.PopupPredicted(Loc.GetString("carry-too-heavy"), carried, carrier, PopupType.SmallCaution);
return;
@ -338,10 +340,7 @@ public sealed class SharedCarryingSystem : EntitySystem
if (HasComp<BeingCarriedComponent>(carrier) || HasComp<BeingCarriedComponent>(carried))
return false;
if (!TryComp<HandsComponent>(carrier, out var hands))
return false;
if (hands.CountFreeHands() < carriedComp.FreeHandsRequired)
if (_handsSystem.CountFreeHands(carrier) < carriedComp.FreeHandsRequired)
return false;
return true;

View file

@ -22,7 +22,6 @@ namespace Content.Shared.Chemistry.EntitySystems;
/// </summary>
public abstract class SharedVaccinatorSystem : EntitySystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
@ -123,7 +122,7 @@ public abstract class SharedVaccinatorSystem : EntitySystem
comp.MixingSoundEntity = _audio.PlayPvs(comp.MixingSound, entity, comp.MixingSound?.Params.WithLoop(true));
}
catch { }
comp.MixTimeEnd = _timing.CurTime + comp.MixDuration;
comp.MixTimeEnd = _gameTiming.CurTime + comp.MixDuration;
_appearance.SetData(entity, SolutionContainerMixerVisuals.Mixing, true);
Dirty(uid, comp);
}
@ -179,7 +178,7 @@ public abstract class SharedVaccinatorSystem : EntitySystem
if (!comp.Mixing)
continue;
if (_timing.CurTime < comp.MixTimeEnd)
if (_gameTiming.CurTime < comp.MixTimeEnd)
continue;
FinishMix((uid, comp));

View file

@ -1,10 +0,0 @@
using Content.Shared.Damage;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
namespace Content.Shared._Sunrise.Felinid;
[RegisterComponent, NetworkedComponent]
public sealed partial class FelinidComponent : Component
{
}

View file

@ -33,7 +33,7 @@ public sealed class PaintRemoverSystem : SharedPaintSystem
if (args.Handled)
return;
if (!args.CanReach || args.Target is not { Valid: true } target || !HasComp<PaintedComponent>(target))
if (!args.CanReach || args.Target is not { Valid: true } target || !HasComp<SprayPaintedComponent>(target))
return;
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.CleanDelay, new PaintRemoverDoAfterEvent(), uid, args.Target, uid)
@ -54,14 +54,14 @@ public sealed class PaintRemoverSystem : SharedPaintSystem
if (args.Target is not { Valid: true } target)
return;
if (!TryComp(target, out PaintedComponent? paint))
if (!TryComp(target, out SprayPaintedComponent? paint))
return;
paint.Enabled = false;
_audio.PlayPredicted(component.Sound, target, args.User);
_popup.PopupClient(Loc.GetString("paint-removed", ("target", target)), args.User, args.User, PopupType.Medium);
_appearanceSystem.SetData(target, PaintVisuals.Painted, false);
RemComp<PaintedComponent>(target);
RemComp<SprayPaintedComponent>(target);
Dirty(target, paint);
args.Handled = true;

View file

@ -7,7 +7,7 @@ namespace Content.Shared._Sunrise.Paint;
/// Component applied to target entity when painted.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class PaintedComponent : Component
public sealed partial class SprayPaintedComponent : Component
{
/// <summary>
/// Color of the paint.

View file

@ -5,7 +5,7 @@
/// </summary>
public abstract class SharedPaintSystem : EntitySystem
{
public virtual void UpdateAppearance(EntityUid uid, PaintedComponent? component = null)
public virtual void UpdateAppearance(EntityUid uid, SprayPaintedComponent? component = null)
{
}
}

View file

@ -1,5 +1,6 @@
using Content.Shared.ActionBlocker;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction;
using Content.Shared.Inventory.VirtualItem;
using Robust.Shared.Containers;
@ -11,6 +12,7 @@ public abstract class SharedRadialSystem : EntitySystem
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!;
[Dependency] protected readonly SharedContainerSystem ContainerSystem = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
public override void Initialize()
{
@ -75,7 +77,7 @@ public abstract class SharedRadialSystem : EntitySystem
EntityUid? @using = null;
if (TryComp(user, out HandsComponent? hands) && (force || _actionBlockerSystem.CanUseHeldEntity(user, target)))
{
@using = hands.ActiveHandEntity;
@using = _handsSystem.GetActiveItem(user);
// Check whether the "Held" entity is a virtual pull entity. If yes, set that as the entity being "Used".
// This allows you to do things like buckle a dragged person onto a surgery table, without click-dragging

View file

@ -1,15 +1,14 @@
using Content.Server.Chemistry.Components;
using Content.Server.Popups;
using Content.Shared._Sunrise.SolutionRegenerationSwitcher;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Reagent;
using Content.Shared.Popups;
namespace Content.Server._Sunrise.SolutionRegenerationSwitcher
namespace Content.Shared._Sunrise.SolutionRegenerationSwitcher
{
public sealed class SolutionRegenerationSwitcherSystem : SharedSolutionRegenerationSwitcherSystem
{
[Dependency] private readonly SharedSolutionContainerSystem _solutionSystem = null!;
[Dependency] private readonly PopupSystem _popups = null!;
[Dependency] private readonly SharedPopupSystem _popups = null!;
private ISawmill _sawmill = null!;

View file

@ -507,7 +507,6 @@
- type: MovementSpeedModifier
baseWalkSpeed: 2.5
baseSprintSpeed: 4.5
- type: Felinid
- type: Carriable
- type: entity

View file

@ -20,10 +20,10 @@
oldAge: 30
maxAge: 60
buttScanTexture: /Textures/_Sunrise/ButtsScans/human.png
defaultHeight: 0.80
defaultWidth: 0.80
maxHeight: 1
maxWidth: 1
defaultHeight: 1
defaultWidth: 1
maxHeight: 1.2
maxWidth: 1.2
minHeight: 0.8
minWidth: 0.8