Separate ghost warp message into two (#3310)

* Separate ghost warp message into two

* Remove redundant arguments

* Address reviews

* Move properties up
This commit is contained in:
DrSmugleaf
2021-02-19 19:29:34 +01:00
committed by GitHub
parent 6d666b92e9
commit 5667cffe95
6 changed files with 81 additions and 47 deletions

View File

@@ -12,6 +12,7 @@ using Robust.Server.Player;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Log;
using Robust.Shared.Network;
using Robust.Shared.Players;
using Robust.Shared.Timing;
@@ -94,43 +95,51 @@ namespace Content.Server.GameObjects.Components.Observer
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new GhostReturnMessage(mind.Mind));
}
break;
case GhostWarpRequestMessage warp:
case GhostWarpToLocationRequestMessage warp:
{
if (session?.AttachedEntity != Owner)
{
break;
}
if (warp.PlayerTarget != default)
foreach (var warpPoint in FindWaypoints())
{
if (!Owner.EntityManager.TryGetEntity(warp.PlayerTarget, out var entity))
if (warp.Name == warpPoint.Location)
{
Owner.Transform.Coordinates = warpPoint.Owner.Transform.Coordinates;
break;
}
if (!entity.TryGetComponent(out IActorComponent? actor))
{
break;
}
if (!_playerManager.TryGetSessionByChannel(actor.playerSession.ConnectedClient, out var player) ||
player.AttachedEntity != entity)
{
break;
}
Owner.Transform.Coordinates = entity.Transform.Coordinates;
}
else
{
foreach (var warpPoint in FindWaypoints())
{
if (warp.WarpName == warpPoint.Location)
{
Owner.Transform.Coordinates = warpPoint.Owner.Transform.Coordinates;
}
}
}
Logger.Warning($"User {session.Name} tried to warp to an invalid warp: {warp.Name}");
break;
}
case GhostWarpToTargetRequestMessage target:
{
if (session?.AttachedEntity != Owner)
{
break;
}
if (!Owner.TryGetComponent(out IActorComponent? actor))
{
break;
}
if (!Owner.EntityManager.TryGetEntity(target.Target, out var entity))
{
Logger.Warning($"User {session.Name} tried to warp to an invalid entity id: {target.Target}");
break;
}
if (!_playerManager.TryGetSessionByChannel(actor.playerSession.ConnectedClient, out var player) ||
player.AttachedEntity != entity)
{
break;
}
Owner.Transform.Coordinates = entity.Transform.Coordinates;
break;
}
case GhostRequestPlayerNameData _: