RCD and tile placement fixes (#21132)

This commit is contained in:
metalgearsloth
2023-10-22 16:53:39 +11:00
committed by GitHub
parent e2352fc28e
commit a5f1683f54
2 changed files with 34 additions and 11 deletions

View File

@@ -1,3 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Numerics;
using Content.Shared.Administration.Logs;
@@ -123,14 +124,10 @@ public sealed class FloorTileSystem : EntitySystem
if (mapGrid != null)
{
var gridUid = mapGrid.Owner;
var ev = new FloorTileAttemptEvent();
RaiseLocalEvent(mapGrid);
if (HasComp<ProtectedGridComponent>(gridUid) || ev.Cancelled)
if (!CanPlaceTile(gridUid, mapGrid, out var reason))
{
if (_netManager.IsClient && _timing.IsFirstTimePredicted)
_popup.PopupEntity(Loc.GetString("invalid-floor-placement"), args.User);
_popup.PopupClient(reason, args.User, args.User);
return;
}
@@ -177,9 +174,25 @@ public sealed class FloorTileSystem : EntitySystem
{
_adminLogger.Add(LogType.Tile, LogImpact.Low, $"{ToPrettyString(user):actor} placed tile {_tileDefinitionManager[tileId].Name} at {ToPrettyString(gridUid)} {location}");
var variant = ((ContentTileDefinition) _tileDefinitionManager[tileId]).PickVariant();
// TODO: Proper predicted RNG.
var variant = (byte) (_timing.CurTick.Value % ((ContentTileDefinition) _tileDefinitionManager[tileId]).Variants);
mapGrid.SetTile(location.Offset(new Vector2(offset, offset)), new Tile(tileId, 0, variant));
_audio.PlayPredicted(placeSound, location, user, AudioHelpers.WithVariation(0.125f, _random));
}
public bool CanPlaceTile(EntityUid gridUid, MapGridComponent component, [NotNullWhen(false)] out string? reason)
{
var ev = new FloorTileAttemptEvent();
RaiseLocalEvent(gridUid, ref ev);
if (HasComp<ProtectedGridComponent>(gridUid) || ev.Cancelled)
{
reason = Loc.GetString("invalid-floor-placement");
return false;
}
reason = null;
return true;
}
}