пара фиксов
This commit is contained in:
@@ -39,7 +39,7 @@ public sealed class VoiceMaskBoundUserInterface : BoundUserInterface
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_window.UpdateState(cast.Name, cast.Verb);
|
_window.UpdateState(cast.Name, cast.Voice, cast.Verb);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
@@ -48,4 +48,4 @@ public sealed class VoiceMaskBoundUserInterface : BoundUserInterface
|
|||||||
|
|
||||||
_window?.Close();
|
_window?.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,8 +122,7 @@ namespace Content.Server.Administration.Managers
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
_chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message"));
|
_chat.DispatchServerMessage(session, Loc.GetString("admin-manager-stealthed-message"));
|
||||||
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-re-admin-message",
|
_chat.SendAdminAnnouncement(Loc.GetString("admin-manager-self-re-admin-message", ("newAdminName", session.Name)));
|
||||||
("newAdminName", session.Name)), flagWhitelist: AdminFlags.Stealth);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SendPermsChangedEvent(session);
|
SendPermsChangedEvent(session);
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ namespace Content.Server.Bed.Sleep
|
|||||||
}
|
}
|
||||||
emitSound.MinInterval = sleepSound.Interval;
|
emitSound.MinInterval = sleepSound.Interval;
|
||||||
emitSound.MaxInterval = sleepSound.MaxInterval;
|
emitSound.MaxInterval = sleepSound.MaxInterval;
|
||||||
emitSound.PopUp = sleepSound.PopUp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public sealed class RespiratorSystem : EntitySystem
|
|||||||
if (TryComp(uid, out VoidAdaptationComponent? voidAdaptation))
|
if (TryComp(uid, out VoidAdaptationComponent? voidAdaptation))
|
||||||
{
|
{
|
||||||
voidAdaptation.ChemMultiplier = 0.75f;
|
voidAdaptation.ChemMultiplier = 0.75f;
|
||||||
StopSuffocation(uid, respirator);
|
StopSuffocation((uid, respirator));
|
||||||
respirator.SuffocationCycles = 0;
|
respirator.SuffocationCycles = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace Content.Server.Chat.Managers
|
|||||||
bool TrySendNewMessage(ICommonSession session, string newMessage, bool checkLength = false);
|
bool TrySendNewMessage(ICommonSession session, string newMessage, bool checkLength = false);
|
||||||
// WD-EDIT
|
// WD-EDIT
|
||||||
|
|
||||||
void SendAdminAnnouncement(string message, AdminFlags? flagBlacklist = null, AdminFlags? flagWhitelist = null);
|
void SendAdminAnnouncement(string message);
|
||||||
void SendAdminAlert(string message);
|
void SendAdminAlert(string message);
|
||||||
void SendAdminAlert(EntityUid player, string message);
|
void SendAdminAlert(EntityUid player, string message);
|
||||||
|
|
||||||
|
|||||||
@@ -1,262 +1,143 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
|
||||||
using Content.Server.Administration.Logs;
|
using Content.Server.Administration.Logs;
|
||||||
using Content.Server.Atmos.EntitySystems;
|
|
||||||
using Content.Server.Chat.Systems;
|
using Content.Server.Chat.Systems;
|
||||||
using Content.Server.GameTicking.Rules;
|
using Content.Server.GameTicking.Rules;
|
||||||
using Content.Server.GameTicking.Rules.Components;
|
using Content.Server.GameTicking.Rules.Components;
|
||||||
using Content.Server.Station.Components;
|
using Content.Server.Station.Components;
|
||||||
using Content.Shared.Database;
|
using Content.Shared.Database;
|
||||||
using Content.Shared.Physics;
|
|
||||||
using Robust.Server.GameObjects;
|
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
using Robust.Shared.Collections;
|
|
||||||
using Robust.Shared.Map;
|
|
||||||
using Robust.Shared.Map.Components;
|
|
||||||
using Robust.Shared.Physics;
|
|
||||||
using Robust.Shared.Physics.Components;
|
|
||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
using Robust.Shared.Random;
|
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
namespace Content.Server._White.AspectsSystem.Base
|
namespace Content.Server._White.AspectsSystem.Base;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Base class for aspect systems.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">The type of component to which the system is applied.</typeparam>
|
||||||
|
public abstract class AspectSystem<T> : GameRuleSystem<T> where T : Component
|
||||||
{
|
{
|
||||||
/// <summary>
|
[Dependency] private readonly IAdminLogManager _adminLogManager = default!;
|
||||||
/// Base class for aspect systems.
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
/// </summary>
|
[Dependency] private readonly ChatSystem _chatSystem = default!;
|
||||||
/// <typeparam name="T">The type of component to which the system is applied.</typeparam>
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
public abstract class AspectSystem<T> : GameRuleSystem<T> where T : Component
|
|
||||||
|
protected ISawmill Sawmill = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
[Dependency] private readonly IAdminLogManager _adminLogManager = default!;
|
base.Initialize();
|
||||||
[Dependency] private readonly IGameTiming _timing = default!;
|
|
||||||
[Dependency] private readonly ChatSystem _chatSystem = default!;
|
|
||||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
|
||||||
[Dependency] private readonly IRobustRandom _robustRandom = default!;
|
|
||||||
[Dependency] private readonly AtmosphereSystem _atmosphere = default!;
|
|
||||||
[Dependency] private readonly TransformSystem _transform = default!;
|
|
||||||
|
|
||||||
protected ISawmill Sawmill = default!;
|
Sawmill = Logger.GetSawmill("aspects");
|
||||||
|
}
|
||||||
|
|
||||||
public override void Initialize()
|
/// <summary>
|
||||||
|
/// Called every tick when this aspect is running.
|
||||||
|
/// </summary>
|
||||||
|
public override void Update(float frameTime)
|
||||||
|
{
|
||||||
|
base.Update(frameTime);
|
||||||
|
|
||||||
|
var query = EntityQueryEnumerator<AspectComponent, GameRuleComponent>();
|
||||||
|
while (query.MoveNext(out var uid, out var aspect, out var ruleData))
|
||||||
{
|
{
|
||||||
base.Initialize();
|
if (!GameTicker.IsGameRuleAdded(uid, ruleData))
|
||||||
|
continue;
|
||||||
|
|
||||||
Sawmill = Logger.GetSawmill("aspects");
|
if (!GameTicker.IsGameRuleActive(uid, ruleData) && _timing.CurTime >= aspect.StartTime)
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Called every tick when this aspect is running.
|
|
||||||
/// </summary>
|
|
||||||
public override void Update(float frameTime)
|
|
||||||
{
|
|
||||||
base.Update(frameTime);
|
|
||||||
|
|
||||||
var query = EntityQueryEnumerator<AspectComponent, GameRuleComponent>();
|
|
||||||
while (query.MoveNext(out var uid, out var aspect, out var ruleData))
|
|
||||||
{
|
{
|
||||||
if (!GameTicker.IsGameRuleAdded(uid, ruleData))
|
GameTicker.StartGameRule(uid, ruleData);
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!GameTicker.IsGameRuleActive(uid, ruleData) && _timing.CurTime >= aspect.StartTime)
|
|
||||||
{
|
|
||||||
GameTicker.StartGameRule(uid, ruleData);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called when an aspect is added to an entity.
|
/// Called when an aspect is added to an entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override void Added(EntityUid uid, T component, GameRuleComponent gameRule, GameRuleAddedEvent args)
|
protected override void Added(EntityUid uid, T component, GameRuleComponent gameRule, GameRuleAddedEvent args)
|
||||||
|
{
|
||||||
|
base.Added(uid, component, gameRule, args);
|
||||||
|
|
||||||
|
if (!TryComp<AspectComponent>(uid, out var aspect))
|
||||||
|
return;
|
||||||
|
|
||||||
|
_adminLogManager.Add(LogType.AspectAnnounced, $"Aspect added {ToPrettyString(uid)}");
|
||||||
|
|
||||||
|
if (aspect is { Description: not null, IsHidden: false })
|
||||||
{
|
{
|
||||||
base.Added(uid, component, gameRule, args);
|
_chatSystem.DispatchGlobalAnnouncement(aspect.Description, playSound: false,
|
||||||
|
colorOverride: Color.Aquamarine);
|
||||||
if (!TryComp<AspectComponent>(uid, out var aspect))
|
|
||||||
return;
|
|
||||||
|
|
||||||
_adminLogManager.Add(LogType.AspectAnnounced, $"Aspect added {ToPrettyString(uid)}");
|
|
||||||
|
|
||||||
if (aspect is { Description: not null, IsHidden: false })
|
|
||||||
{
|
|
||||||
_chatSystem.DispatchGlobalAnnouncement(aspect.Description, playSound: false,
|
|
||||||
colorOverride: Color.Aquamarine);
|
|
||||||
}
|
|
||||||
|
|
||||||
_audio.PlayGlobal(aspect.StartAudio, Filter.Broadcast(), true);
|
|
||||||
aspect.StartTime = _timing.CurTime + aspect.StartDelay;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
_audio.PlayGlobal(aspect.StartAudio, Filter.Broadcast(), true);
|
||||||
/// Called when an aspect is started.
|
aspect.StartTime = _timing.CurTime + aspect.StartDelay;
|
||||||
/// </summary>
|
}
|
||||||
protected override void Started(
|
|
||||||
EntityUid uid,
|
/// <summary>
|
||||||
T component,
|
/// Called when an aspect is started.
|
||||||
GameRuleComponent gameRule,
|
/// </summary>
|
||||||
GameRuleStartedEvent args)
|
protected override void Started(
|
||||||
|
EntityUid uid,
|
||||||
|
T component,
|
||||||
|
GameRuleComponent gameRule,
|
||||||
|
GameRuleStartedEvent args)
|
||||||
|
{
|
||||||
|
base.Started(uid, component, gameRule, args);
|
||||||
|
|
||||||
|
if (!TryComp<AspectComponent>(uid, out _))
|
||||||
|
return;
|
||||||
|
|
||||||
|
_adminLogManager.Add(LogType.AspectStarted, LogImpact.High, $"Aspect started: {ToPrettyString(uid)}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when an aspect is ended.
|
||||||
|
/// </summary>
|
||||||
|
protected override void Ended(EntityUid uid, T component, GameRuleComponent gameRule, GameRuleEndedEvent args)
|
||||||
|
{
|
||||||
|
base.Ended(uid, component, gameRule, args);
|
||||||
|
|
||||||
|
if (!TryComp<AspectComponent>(uid, out var aspect))
|
||||||
|
return;
|
||||||
|
|
||||||
|
_adminLogManager.Add(LogType.AspectStopped, $"Aspect ended: {ToPrettyString(uid)}");
|
||||||
|
|
||||||
|
if (aspect is { Name: not null, IsHidden: false })
|
||||||
{
|
{
|
||||||
base.Started(uid, component, gameRule, args);
|
_chatSystem.DispatchGlobalAnnouncement($"Именем аспекта являлось: {aspect.Name}", playSound: false,
|
||||||
|
colorOverride: Color.Aquamarine);
|
||||||
if (!TryComp<AspectComponent>(uid, out _))
|
|
||||||
return;
|
|
||||||
|
|
||||||
_adminLogManager.Add(LogType.AspectStarted, LogImpact.High, $"Aspect started: {ToPrettyString(uid)}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
_audio.PlayGlobal(aspect.EndAudio, Filter.Broadcast(), true);
|
||||||
/// Called when an aspect is ended.
|
}
|
||||||
/// </summary>
|
|
||||||
protected override void Ended(EntityUid uid, T component, GameRuleComponent gameRule, GameRuleEndedEvent args)
|
|
||||||
{
|
|
||||||
base.Ended(uid, component, gameRule, args);
|
|
||||||
|
|
||||||
if (!TryComp<AspectComponent>(uid, out var aspect))
|
|
||||||
return;
|
|
||||||
|
|
||||||
_adminLogManager.Add(LogType.AspectStopped, $"Aspect ended: {ToPrettyString(uid)}");
|
|
||||||
|
|
||||||
if (aspect is { Name: not null, IsHidden: false })
|
|
||||||
{
|
|
||||||
_chatSystem.DispatchGlobalAnnouncement($"Именем аспекта являлось: {aspect.Name}", playSound: false,
|
|
||||||
colorOverride: Color.Aquamarine);
|
|
||||||
}
|
|
||||||
|
|
||||||
_audio.PlayGlobal(aspect.EndAudio, Filter.Broadcast(), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Helpers
|
#region Helpers
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Forces this aspect to end prematurely.
|
/// Forces this aspect to end prematurely.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="uid">The entity UID on which the aspect is being performed.</param>
|
/// <param name="uid">The entity UID on which the aspect is being performed.</param>
|
||||||
/// <param name="component">The game rule component associated with this aspect (optional).</param>
|
/// <param name="component">The game rule component associated with this aspect (optional).</param>
|
||||||
protected void ForceEndSelf(EntityUid uid, GameRuleComponent? component = null)
|
protected void ForceEndSelf(EntityUid uid, GameRuleComponent? component = null)
|
||||||
|
{
|
||||||
|
GameTicker.EndGameRule(uid, component);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool TryGetStationGrids(
|
||||||
|
[NotNullWhen(true)] out EntityUid? targetStation,
|
||||||
|
[NotNullWhen(true)] out HashSet<EntityUid>? grids)
|
||||||
|
{
|
||||||
|
if (!TryGetRandomStation(out targetStation))
|
||||||
{
|
{
|
||||||
GameTicker.EndGameRule(uid, component);
|
targetStation = EntityUid.Invalid;
|
||||||
|
grids = null;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected bool TryGetRandomStation(
|
grids = Comp<StationDataComponent>(targetStation.Value).Grids;
|
||||||
[NotNullWhen(true)] out EntityUid? station,
|
|
||||||
Func<EntityUid, bool>? filter = null)
|
|
||||||
{
|
|
||||||
var stations = new ValueList<EntityUid>();
|
|
||||||
|
|
||||||
if (filter == null)
|
return grids.Count > 0;
|
||||||
{
|
}
|
||||||
var stationCount = Count<StationEventEligibleComponent>();
|
|
||||||
if (stationCount > 0)
|
|
||||||
{
|
|
||||||
stations.EnsureCapacity(stationCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filter ??= _ => true;
|
|
||||||
var query = AllEntityQuery<StationEventEligibleComponent>();
|
|
||||||
|
|
||||||
while (query.MoveNext(out var uid, out _))
|
|
||||||
{
|
|
||||||
if (!filter(uid))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
stations.Add(uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stations.Count == 0)
|
|
||||||
{
|
|
||||||
station = null;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
station = stations[_robustRandom.Next(stations.Count)];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool TryGetStationGrids(
|
|
||||||
[NotNullWhen(true)] out EntityUid? targetStation,
|
|
||||||
[NotNullWhen(true)] out HashSet<EntityUid>? grids)
|
|
||||||
{
|
|
||||||
if (!TryGetRandomStation(out targetStation))
|
|
||||||
{
|
|
||||||
targetStation = EntityUid.Invalid;
|
|
||||||
grids = null;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
grids = Comp<StationDataComponent>(targetStation.Value).Grids;
|
|
||||||
|
|
||||||
return grids.Count > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool TryFindRandomTile(
|
|
||||||
out Vector2i tile,
|
|
||||||
[NotNullWhen(true)] out EntityUid? targetStation,
|
|
||||||
out EntityUid targetGrid,
|
|
||||||
out EntityCoordinates targetCoords)
|
|
||||||
{
|
|
||||||
tile = default;
|
|
||||||
|
|
||||||
targetCoords = EntityCoordinates.Invalid;
|
|
||||||
|
|
||||||
if (!TryGetStationGrids(out targetStation, out var possibleTargets))
|
|
||||||
{
|
|
||||||
targetGrid = EntityUid.Invalid;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
targetGrid = _robustRandom.Pick(possibleTargets);
|
|
||||||
foreach (var target in possibleTargets.Where(HasComp<BecomesStationComponent>))
|
|
||||||
{
|
|
||||||
targetGrid = target;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!TryComp<MapGridComponent>(targetGrid, out var gridComp))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
var found = false;
|
|
||||||
var gridBounds = gridComp.LocalAABB.Scale(0.6f);
|
|
||||||
|
|
||||||
for (var i = 0; i < 10; i++)
|
|
||||||
{
|
|
||||||
var randomX = _robustRandom.Next((int) gridBounds.Left, (int) gridBounds.Right);
|
|
||||||
var randomY = _robustRandom.Next((int) gridBounds.Bottom, (int) gridBounds.Top);
|
|
||||||
|
|
||||||
tile = new Vector2i(randomX, randomY);
|
|
||||||
if (_atmosphere.IsTileSpace(targetGrid, Transform(targetGrid).MapUid, tile,
|
|
||||||
mapGridComp: gridComp)
|
|
||||||
|| _atmosphere.IsTileAirBlocked(targetGrid, tile, mapGridComp: gridComp))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var physQuery = GetEntityQuery<PhysicsComponent>();
|
|
||||||
var valid = true;
|
|
||||||
foreach (var ent in gridComp.GetAnchoredEntities(tile))
|
|
||||||
{
|
|
||||||
if (!physQuery.TryGetComponent(ent, out var body))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (body.BodyType != BodyType.Static ||
|
|
||||||
!body.Hard ||
|
|
||||||
(body.CollisionLayer & (int) CollisionGroup.Impassable) == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
valid = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!valid)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
found = true;
|
|
||||||
targetCoords = gridComp.GridTileToLocal(tile);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return found;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -190,8 +190,8 @@ public sealed class TorchCultistsProviderSystem : EntitySystem
|
|||||||
var ownerTransform = Transform(args.User);
|
var ownerTransform = Transform(args.User);
|
||||||
|
|
||||||
if (_station.GetStationInMap(ownerTransform.MapID) is not { } station ||
|
if (_station.GetStationInMap(ownerTransform.MapID) is not { } station ||
|
||||||
!TryComp<StationDataComponent>(station, out var data) ||
|
!TryComp<StationDataComponent>(station, out var stationData) ||
|
||||||
_station.GetLargestGrid(data) is not { } grid)
|
_station.GetLargestGrid(stationData) is not { } grid)
|
||||||
{
|
{
|
||||||
if (ownerTransform.GridUid == null)
|
if (ownerTransform.GridUid == null)
|
||||||
return;
|
return;
|
||||||
@@ -199,13 +199,13 @@ public sealed class TorchCultistsProviderSystem : EntitySystem
|
|||||||
grid = ownerTransform.GridUid.Value;
|
grid = ownerTransform.GridUid.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!TryComp<MapGridComponent>(grid, out var gridComp))
|
if (!TryComp<MapGridComponent>(grid, out var mapGrid))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var gridTransform = Transform(grid);
|
var gridTransform = Transform(grid);
|
||||||
var gridBounds = gridComp.LocalAABB.Scale(0.7f); // чтобы не заспавнить на самом краю станции
|
var gridBounds = mapGrid.LocalAABB.Scale(0.7f); // чтобы не заспавнить на самом краю станции
|
||||||
|
|
||||||
var targetCoords = gridTransform.Coordinates;
|
var targetCoords = gridTransform.Coordinates;
|
||||||
|
|
||||||
@@ -217,8 +217,8 @@ public sealed class TorchCultistsProviderSystem : EntitySystem
|
|||||||
var tile = new Vector2i(randomX, randomY);
|
var tile = new Vector2i(randomX, randomY);
|
||||||
|
|
||||||
// no air-blocked areas.
|
// no air-blocked areas.
|
||||||
if (_atmosphere.IsTileSpace(grid, gridTransform.MapUid, tile, mapGridComp: gridComp) ||
|
if (_atmosphere.IsTileSpace(grid, gridTransform.MapUid, tile) ||
|
||||||
_atmosphere.IsTileAirBlocked(grid, tile, mapGridComp: gridComp))
|
_atmosphere.IsTileAirBlocked(grid, tile, mapGridComp: mapGrid))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -226,7 +226,7 @@ public sealed class TorchCultistsProviderSystem : EntitySystem
|
|||||||
// don't spawn inside of solid objects
|
// don't spawn inside of solid objects
|
||||||
var physQuery = GetEntityQuery<PhysicsComponent>();
|
var physQuery = GetEntityQuery<PhysicsComponent>();
|
||||||
var valid = true;
|
var valid = true;
|
||||||
foreach (var ent in _map.GetAnchoredEntities(grid, gridComp, tile))
|
foreach (var ent in _map.GetAnchoredEntities(grid, mapGrid, tile))
|
||||||
{
|
{
|
||||||
if (!physQuery.TryGetComponent(ent, out var body))
|
if (!physQuery.TryGetComponent(ent, out var body))
|
||||||
continue;
|
continue;
|
||||||
@@ -243,7 +243,7 @@ public sealed class TorchCultistsProviderSystem : EntitySystem
|
|||||||
if (!valid)
|
if (!valid)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
targetCoords = _map.GridTileToLocal(grid, gridComp, tile);
|
targetCoords = _map.GridTileToLocal(grid, mapGrid, tile);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -321,9 +321,10 @@ namespace Content.Server._White.Supermatter.Systems
|
|||||||
|
|
||||||
//if there are space tiles next to SM
|
//if there are space tiles next to SM
|
||||||
//TODO: change moles out for checking if adjacent tiles exist
|
//TODO: change moles out for checking if adjacent tiles exist
|
||||||
foreach (var ind in _atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, indices))
|
var query = _atmosphere.GetAdjacentTileMixtures(xform.GridUid.Value, indices);
|
||||||
|
while(query.MoveNext(out var mix))
|
||||||
{
|
{
|
||||||
if (ind.TotalMoles != 0)
|
if (mix.TotalMoles != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var integrity = GetIntegrity(sMcomponent.Damage, sMcomponent.ExplosionPoint);
|
var integrity = GetIntegrity(sMcomponent.Damage, sMcomponent.ExplosionPoint);
|
||||||
|
|||||||
Reference in New Issue
Block a user