Predict virtual hands and co (#36617)

These are the easy ones anything else gets slightly spicier.
This commit is contained in:
metalgearsloth
2025-04-19 16:51:12 +10:00
committed by GitHub
parent 63dfd21b14
commit 4682149e74
5 changed files with 23 additions and 52 deletions

View File

@@ -21,6 +21,7 @@ using Content.Shared.Weapons.Ranged.Events;
using Content.Shared.Weapons.Ranged.Systems;
using Content.Shared.Wieldable.Components;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Collections;
using Robust.Shared.Network;
using Robust.Shared.Timing;
@@ -260,26 +261,21 @@ public abstract class SharedWieldableSystem : EntitySystem
_audio.PlayPredicted(component.WieldSound, used, user);
//This section handles spawning the virtual item(s) to occupy the required additional hand(s).
//Since the client can't currently predict entity spawning, only do this if this is running serverside.
//Remove this check if TrySpawnVirtualItem in SharedVirtualItemSystem is allowed to complete clientside.
if (_netManager.IsServer)
var virtuals = new ValueList<EntityUid>();
for (var i = 0; i < component.FreeHandsRequired; i++)
{
var virtuals = new List<EntityUid>();
for (var i = 0; i < component.FreeHandsRequired; i++)
if (_virtualItem.TrySpawnVirtualItemInHand(used, user, out var virtualItem, true))
{
if (_virtualItem.TrySpawnVirtualItemInHand(used, user, out var virtualItem, true))
{
virtuals.Add(virtualItem.Value);
continue;
}
foreach (var existingVirtual in virtuals)
{
QueueDel(existingVirtual);
}
return false;
virtuals.Add(virtualItem.Value);
continue;
}
foreach (var existingVirtual in virtuals)
{
QueueDel(existingVirtual);
}
return false;
}
var selfMessage = Loc.GetString("wieldable-component-successful-wield", ("item", used));