@@ -333,7 +333,8 @@ namespace Content.Server.Ghost
|
|||||||
if (_followerSystem.GetMostGhostFollowed() is not {} target)
|
if (_followerSystem.GetMostGhostFollowed() is not {} target)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
WarpTo(uid, target);
|
// If there is a ghostnado happening you almost definitely wanna join it, so we automatically follow instead of just warping.
|
||||||
|
_followerSystem.StartFollowingEntity(uid, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WarpTo(EntityUid uid, EntityUid target)
|
private void WarpTo(EntityUid uid, EntityUid target)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ public sealed class FollowerSystem : EntitySystem
|
|||||||
[Dependency] private readonly ISharedAdminManager _adminManager = default!;
|
[Dependency] private readonly ISharedAdminManager _adminManager = default!;
|
||||||
|
|
||||||
private static readonly ProtoId<TagPrototype> ForceableFollowTag = "ForceableFollow";
|
private static readonly ProtoId<TagPrototype> ForceableFollowTag = "ForceableFollow";
|
||||||
|
private static readonly ProtoId<TagPrototype> PreventGhostnadoWarpTag = "NotGhostnadoWarpable";
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -320,11 +321,17 @@ public sealed class FollowerSystem : EntitySystem
|
|||||||
var query = EntityQueryEnumerator<FollowerComponent, GhostComponent, ActorComponent>();
|
var query = EntityQueryEnumerator<FollowerComponent, GhostComponent, ActorComponent>();
|
||||||
while (query.MoveNext(out _, out var follower, out _, out var actor))
|
while (query.MoveNext(out _, out var follower, out _, out var actor))
|
||||||
{
|
{
|
||||||
// Exclude admins
|
// Don't count admin followers so that players cannot notice if admins are in stealth mode and following someone.
|
||||||
if (_adminManager.IsAdmin(actor.PlayerSession))
|
if (_adminManager.IsAdmin(actor.PlayerSession))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var followed = follower.Following;
|
var followed = follower.Following;
|
||||||
|
|
||||||
|
// If the followed entity cannot be ghostnado'd to, we don't count it.
|
||||||
|
// Used for making admins not warpable to, but IsAdmin isn't used for cases where the admin wants to be followed, for example during events.
|
||||||
|
if (_tagSystem.HasTag(followed, PreventGhostnadoWarpTag))
|
||||||
|
continue;
|
||||||
|
|
||||||
// Add new entry or increment existing
|
// Add new entry or increment existing
|
||||||
followedEnts.TryGetValue(followed, out var currentValue);
|
followedEnts.TryGetValue(followed, out var currentValue);
|
||||||
followedEnts[followed] = currentValue + 1;
|
followedEnts[followed] = currentValue + 1;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
- SilentStorageUser
|
- SilentStorageUser
|
||||||
- PreventAccessLogging
|
- PreventAccessLogging
|
||||||
- AllowBiomeLoading
|
- AllowBiomeLoading
|
||||||
|
- NotGhostnadoWarpable
|
||||||
- type: Input
|
- type: Input
|
||||||
context: "aghost"
|
context: "aghost"
|
||||||
- type: Ghost
|
- type: Ghost
|
||||||
|
|||||||
@@ -973,7 +973,7 @@
|
|||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: Mouse # CargoBounty: BountyMouse
|
id: Mouse # CargoBounty: BountyMouse
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: Multitool # Storage whitelist: BaseClothingBeltEngineering. ItemMapper: BaseClothingBeltEngineering. ConstructionGraph: LogicGate
|
id: Multitool # Storage whitelist: BaseClothingBeltEngineering. ItemMapper: BaseClothingBeltEngineering. ConstructionGraph: LogicGate
|
||||||
|
|
||||||
@@ -987,6 +987,9 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
id: NoConsoleSound # Blacklist on BaseComputer, StationMap. Tagged entity will not make sound when opening the UI.
|
id: NoConsoleSound # Blacklist on BaseComputer, StationMap. Tagged entity will not make sound when opening the UI.
|
||||||
|
|
||||||
|
- type: Tag
|
||||||
|
id: NotGhostnadoWarpable # Prevents the entity from being selected via "Warp to most followed" ghost warp
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: NozzleBackTank # Used by WeaponSprayNozzle to find a tagged entity for supplying ammo.
|
id: NozzleBackTank # Used by WeaponSprayNozzle to find a tagged entity for supplying ammo.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user