Ling fixes and tweaks (#259)
* - fix: Bees fix. * - fix: Transform transfers body type. * - fix: Chemcap is transfered on transform. * - fix: Gulag objective actual fix. * - fix: Fix escape with identity not working. * - tweak: Fixes & objective tweaks. * - tweak: More slowdown from ling armor.
This commit is contained in:
@@ -385,7 +385,7 @@ namespace Content.Server.Administration.Systems
|
|||||||
var senderSession = eventArgs.SenderSession;
|
var senderSession = eventArgs.SenderSession;
|
||||||
|
|
||||||
//No bwoink for banned
|
//No bwoink for banned
|
||||||
if (_gulagSystem.IsUserGulaged(senderSession.UserId, out _))
|
if (_gulagSystem.IsUserGulagged(senderSession.UserId, out _))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public sealed class AntagSelectionSystem : GameRuleSystem<GameRuleComponent>
|
|||||||
chosen = new List<EntityUid>();
|
chosen = new List<EntityUid>();
|
||||||
foreach (var player in allPlayers)
|
foreach (var player in allPlayers)
|
||||||
{
|
{
|
||||||
if (_gulag.IsUserGulaged(player.UserId, out _)) // WD
|
if (_gulag.IsUserGulagged(player.UserId, out _)) // WD
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (includeHeads == false)
|
if (includeHeads == false)
|
||||||
@@ -179,7 +179,7 @@ public sealed class AntagSelectionSystem : GameRuleSystem<GameRuleComponent>
|
|||||||
|
|
||||||
foreach (var player in candidates.Keys)
|
foreach (var player in candidates.Keys)
|
||||||
{
|
{
|
||||||
if (_gulag.IsUserGulaged(player.UserId, out _)) // WD
|
if (_gulag.IsUserGulagged(player.UserId, out _)) // WD
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (_sharedPlayerSystem.ContentData(player) is not {Mind: { } mindId} || _roles.MindIsAntagonist(mindId))
|
if (_sharedPlayerSystem.ContentData(player) is not {Mind: { } mindId} || _roles.MindIsAntagonist(mindId))
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
|||||||
if (changeling.TotalChangelings >= MaxChangelings)
|
if (changeling.TotalChangelings >= MaxChangelings)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (_gulag.IsUserGulaged(ev.Player.UserId, out _))
|
if (_gulag.IsUserGulagged(ev.Player.UserId, out _))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!ev.LateJoin)
|
if (!ev.LateJoin)
|
||||||
|
|||||||
@@ -819,6 +819,7 @@ public sealed partial class ChangelingSystem
|
|||||||
var toAdd = new ChangelingComponent
|
var toAdd = new ChangelingComponent
|
||||||
{
|
{
|
||||||
HiveName = component.HiveName,
|
HiveName = component.HiveName,
|
||||||
|
ChemicalCapacity = component.ChemicalCapacity,
|
||||||
ChemicalsBalance = component.ChemicalsBalance,
|
ChemicalsBalance = component.ChemicalsBalance,
|
||||||
AbsorbedEntities = component.AbsorbedEntities,
|
AbsorbedEntities = component.AbsorbedEntities,
|
||||||
IsInited = component.IsInited,
|
IsInited = component.IsInited,
|
||||||
@@ -902,10 +903,10 @@ public sealed partial class ChangelingSystem
|
|||||||
if (component.AbsorbedEntities.ContainsKey(targetDna.DNA))
|
if (component.AbsorbedEntities.ContainsKey(targetDna.DNA))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (component.AbsorbedEntities.Count == 7)
|
/*if (component.AbsorbedEntities.Count == 7)
|
||||||
{
|
{
|
||||||
component.AbsorbedEntities.Remove(component.AbsorbedEntities.ElementAt(2).Key);
|
component.AbsorbedEntities.Remove(component.AbsorbedEntities.ElementAt(2).Key);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
var appearance = _serializationManager.CreateCopy(targetAppearance, notNullableOverride: true);
|
var appearance = _serializationManager.CreateCopy(targetAppearance, notNullableOverride: true);
|
||||||
var meta = _serializationManager.CreateCopy(targetMeta, notNullableOverride: true);
|
var meta = _serializationManager.CreateCopy(targetMeta, notNullableOverride: true);
|
||||||
@@ -966,6 +967,7 @@ public sealed partial class ChangelingSystem
|
|||||||
var toAdd = new ChangelingComponent
|
var toAdd = new ChangelingComponent
|
||||||
{
|
{
|
||||||
HiveName = lingComp.HiveName,
|
HiveName = lingComp.HiveName,
|
||||||
|
ChemicalCapacity = lingComp.ChemicalCapacity,
|
||||||
ChemicalsBalance = lingComp.ChemicalsBalance,
|
ChemicalsBalance = lingComp.ChemicalsBalance,
|
||||||
AbsorbedEntities = lingComp.AbsorbedEntities,
|
AbsorbedEntities = lingComp.AbsorbedEntities,
|
||||||
IsInited = lingComp.IsInited,
|
IsInited = lingComp.IsInited,
|
||||||
@@ -1104,7 +1106,8 @@ public sealed partial class ChangelingSystem
|
|||||||
targetHumanoid.EyeColor = sourceHumanoid.EyeColor;
|
targetHumanoid.EyeColor = sourceHumanoid.EyeColor;
|
||||||
targetHumanoid.Age = sourceHumanoid.Age;
|
targetHumanoid.Age = sourceHumanoid.Age;
|
||||||
_humanoidAppearance.SetSex(target, sourceHumanoid.Sex, false, targetHumanoid);
|
_humanoidAppearance.SetSex(target, sourceHumanoid.Sex, false, targetHumanoid);
|
||||||
_humanoidAppearance.SetSpecies(target, sourceHumanoid.Species);
|
_humanoidAppearance.SetBodyType(target, sourceHumanoid.BodyType, false, targetHumanoid);
|
||||||
|
_humanoidAppearance.SetSpecies(target, sourceHumanoid.Species, true, targetHumanoid);
|
||||||
targetHumanoid.CustomBaseLayers = new Dictionary<HumanoidVisualLayers,
|
targetHumanoid.CustomBaseLayers = new Dictionary<HumanoidVisualLayers,
|
||||||
CustomBaseLayerInfo>(sourceHumanoid.CustomBaseLayers);
|
CustomBaseLayerInfo>(sourceHumanoid.CustomBaseLayers);
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using Content.Server.Actions;
|
|||||||
using Content.Shared.Actions;
|
using Content.Shared.Actions;
|
||||||
using Content.Shared.Changeling;
|
using Content.Shared.Changeling;
|
||||||
using Content.Shared.Inventory;
|
using Content.Shared.Inventory;
|
||||||
|
using Content.Shared.Mobs.Systems;
|
||||||
|
|
||||||
namespace Content.Server.Changeling;
|
namespace Content.Server.Changeling;
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@ public sealed class HiveHeadSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
[Dependency] private readonly ActionsSystem _actions = default!;
|
[Dependency] private readonly ActionsSystem _actions = default!;
|
||||||
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
||||||
|
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -22,6 +24,9 @@ public sealed class HiveHeadSystem : EntitySystem
|
|||||||
|
|
||||||
private void OnReleaseBees(Entity<HiveHeadComponent> ent, ref ReleaseBeesEvent args)
|
private void OnReleaseBees(Entity<HiveHeadComponent> ent, ref ReleaseBeesEvent args)
|
||||||
{
|
{
|
||||||
|
if (!_mobState.IsAlive(args.Performer))
|
||||||
|
return;
|
||||||
|
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
|
|
||||||
var coords = Transform(args.Performer).Coordinates;
|
var coords = Transform(args.Performer).Coordinates;
|
||||||
@@ -34,8 +39,11 @@ public sealed class HiveHeadSystem : EntitySystem
|
|||||||
|
|
||||||
private void OnGetActions(Entity<HiveHeadComponent> ent, ref GetItemActionsEvent args)
|
private void OnGetActions(Entity<HiveHeadComponent> ent, ref GetItemActionsEvent args)
|
||||||
{
|
{
|
||||||
if (args.SlotFlags == SlotFlags.HEAD)
|
if (args.SlotFlags != SlotFlags.HEAD)
|
||||||
args.AddAction(ref ent.Comp.ActionEntity, ent.Comp.Action);
|
return;
|
||||||
|
|
||||||
|
args.AddAction(ref ent.Comp.ActionEntity, ent.Comp.Action);
|
||||||
|
_actions.SetCooldown(ent.Comp.ActionEntity, TimeSpan.FromSeconds(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnShutdown(Entity<HiveHeadComponent> ent, ref ComponentShutdown args)
|
private void OnShutdown(Entity<HiveHeadComponent> ent, ref ComponentShutdown args)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server._Miracle.Components;
|
using Content.Server._Miracle.Components;
|
||||||
|
using Content.Server._Miracle.GulagSystem;
|
||||||
using Content.Server.Changeling.Objectives.Components;
|
using Content.Server.Changeling.Objectives.Components;
|
||||||
using Content.Server.Forensics;
|
using Content.Server.Forensics;
|
||||||
using Content.Server.Mind;
|
using Content.Server.Mind;
|
||||||
@@ -20,6 +21,7 @@ public sealed class ChangelingConditionsSystem : EntitySystem
|
|||||||
[Dependency] private readonly TargetObjectiveSystem _target = default!;
|
[Dependency] private readonly TargetObjectiveSystem _target = default!;
|
||||||
[Dependency] private readonly MindSystem _mind = default!;
|
[Dependency] private readonly MindSystem _mind = default!;
|
||||||
[Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!;
|
[Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!;
|
||||||
|
[Dependency] private readonly GulagSystem _gulag = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -185,14 +187,19 @@ public sealed class ChangelingConditionsSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var allHumans = _mind.GetAliveHumansExcept(args.MindId);
|
var allHumans = _mind.GetAliveHumansExcept(args.MindId);
|
||||||
allHumans = allHumans.Where(x => !HasComp<GulagBoundComponent>(x)).ToList();
|
allHumans = allHumans.Where(x => !_gulag.IsMindGulagged(x)).ToList();
|
||||||
if (allHumans.Count == 0)
|
if (allHumans.Count == 0)
|
||||||
{
|
{
|
||||||
args.Cancelled = true;
|
args.Cancelled = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_target.SetTarget(uid, _random.Pick(allHumans), target);
|
var targetMindId = _random.Pick(allHumans);
|
||||||
|
|
||||||
|
if (TryComp(targetMindId, out MindComponent? mind) && TryComp(mind.CurrentEntity, out DnaComponent? dna))
|
||||||
|
component.DNA = dna.DNA;
|
||||||
|
|
||||||
|
_target.SetTarget(uid, targetMindId, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEscapeWithIdentityGetProgress(EntityUid uid, EscapeWithIdentityConditionComponent component, ref ObjectiveGetProgressEvent args)
|
private void OnEscapeWithIdentityGetProgress(EntityUid uid, EscapeWithIdentityConditionComponent component, ref ObjectiveGetProgressEvent args)
|
||||||
@@ -200,10 +207,15 @@ public sealed class ChangelingConditionsSystem : EntitySystem
|
|||||||
if (!_target.GetTarget(uid, out var target))
|
if (!_target.GetTarget(uid, out var target))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
args.Progress = GetEscapeWithIdentityProgress(args.Mind, target.Value);
|
var fallbackDNA = string.Empty;
|
||||||
|
|
||||||
|
if (TryComp(uid, out PickRandomIdentityComponent? pickIdentity))
|
||||||
|
fallbackDNA = pickIdentity.DNA;
|
||||||
|
|
||||||
|
args.Progress = GetEscapeWithIdentityProgress(args.Mind, target.Value, fallbackDNA);
|
||||||
}
|
}
|
||||||
|
|
||||||
private float GetEscapeWithIdentityProgress(MindComponent mind, EntityUid target)
|
private float GetEscapeWithIdentityProgress(MindComponent mind, EntityUid target, string DNA)
|
||||||
{
|
{
|
||||||
var progress = 0f;
|
var progress = 0f;
|
||||||
|
|
||||||
@@ -213,24 +225,21 @@ public sealed class ChangelingConditionsSystem : EntitySystem
|
|||||||
if (!TryComp<MindComponent>(target, out var targetMind))
|
if (!TryComp<MindComponent>(target, out var targetMind))
|
||||||
return 0f;
|
return 0f;
|
||||||
|
|
||||||
if (!TryComp<DnaComponent>(targetMind.CurrentEntity, out var targetDna))
|
if (TryComp<DnaComponent>(targetMind.CurrentEntity, out var targetDna))
|
||||||
return 0f;
|
DNA = targetDna.DNA;
|
||||||
|
|
||||||
if (!TryComp<ChangelingComponent>(mind.CurrentEntity, out var changeling))
|
if (!TryComp<ChangelingComponent>(mind.CurrentEntity, out var changeling))
|
||||||
return 0f;
|
return 0f;
|
||||||
|
|
||||||
if (!changeling.AbsorbedEntities.ContainsKey(targetDna.DNA))
|
if (!changeling.AbsorbedEntities.ContainsKey(DNA))
|
||||||
return 0f;
|
return 0f;
|
||||||
|
|
||||||
//Target absorbed by this changeling, so 50% of work is done
|
//Target absorbed by this changeling, so 50% of work is done
|
||||||
progress += 0.5f;
|
progress += 0.5f;
|
||||||
|
|
||||||
if (_emergencyShuttle.IsTargetEscaping(mind.CurrentEntity.Value) && selfDna.DNA == targetDna.DNA)
|
if (_emergencyShuttle.IsTargetEscaping(mind.CurrentEntity.Value) && selfDna.DNA == DNA)
|
||||||
progress += 0.5f;
|
progress += 0.5f;
|
||||||
|
|
||||||
if (_emergencyShuttle.ShuttlesLeft)
|
|
||||||
return progress;
|
|
||||||
|
|
||||||
return progress;
|
return progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,5 +3,6 @@
|
|||||||
[RegisterComponent]
|
[RegisterComponent]
|
||||||
public sealed partial class PickRandomIdentityComponent : Component
|
public sealed partial class PickRandomIdentityComponent : Component
|
||||||
{
|
{
|
||||||
|
[ViewVariables]
|
||||||
|
public string DNA = string.Empty;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace Content.Server.Chat.Commands
|
|||||||
}
|
}
|
||||||
|
|
||||||
var gulag = EntitySystem.Get<GulagSystem>();
|
var gulag = EntitySystem.Get<GulagSystem>();
|
||||||
if (gulag.IsUserGulaged(shell.Player.UserId, out var _))
|
if (gulag.IsUserGulagged(shell.Player.UserId, out var _))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -634,7 +634,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem<NukeopsRuleComponent>
|
|||||||
// ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator
|
// ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator
|
||||||
foreach (var player in everyone)
|
foreach (var player in everyone)
|
||||||
{
|
{
|
||||||
if (_gulag.IsUserGulaged(player.UserId, out _)) // WD
|
if (_gulag.IsUserGulagged(player.UserId, out _)) // WD
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!ev.Profiles.ContainsKey(player.UserId))
|
if (!ev.Profiles.ContainsKey(player.UserId))
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem<TraitorRuleComponent>
|
|||||||
if (!GameTicker.IsGameRuleAdded(uid, gameRule))
|
if (!GameTicker.IsGameRuleAdded(uid, gameRule))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (_gulag.IsUserGulaged(ev.Player.UserId, out _)) // WD
|
if (_gulag.IsUserGulagged(ev.Player.UserId, out _)) // WD
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (traitor.TotalTraitors >= MaxTraitors)
|
if (traitor.TotalTraitors >= MaxTraitors)
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem<ZombieRuleComponent>
|
|||||||
var prefList = new List<ICommonSession>();
|
var prefList = new List<ICommonSession>();
|
||||||
foreach (var player in allPlayers)
|
foreach (var player in allPlayers)
|
||||||
{
|
{
|
||||||
if (_gulag.IsUserGulaged(player.UserId, out _)) // WD
|
if (_gulag.IsUserGulagged(player.UserId, out _)) // WD
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (player.AttachedEntity == null || !HasComp<HumanoidAppearanceComponent>(player.AttachedEntity) || HasComp<ZombieImmuneComponent>(player.AttachedEntity))
|
if (player.AttachedEntity == null || !HasComp<HumanoidAppearanceComponent>(player.AttachedEntity) || HasComp<ZombieImmuneComponent>(player.AttachedEntity))
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ namespace Content.Server.Ghost.Roles
|
|||||||
if (!_ghostRoles.TryGetValue(identifier, out var role))
|
if (!_ghostRoles.TryGetValue(identifier, out var role))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_gulagSystem.IsUserGulaged(player.UserId, out _))
|
if (_gulagSystem.IsUserGulagged(player.UserId, out _))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server._Miracle.Components;
|
using Content.Server._Miracle.Components;
|
||||||
|
using Content.Server._Miracle.GulagSystem;
|
||||||
using Content.Server._White.Cult.GameRule;
|
using Content.Server._White.Cult.GameRule;
|
||||||
using Content.Server.Objectives.Components;
|
using Content.Server.Objectives.Components;
|
||||||
using Content.Server.Shuttles.Systems;
|
using Content.Server.Shuttles.Systems;
|
||||||
@@ -23,6 +24,7 @@ public sealed class KillPersonConditionSystem : EntitySystem
|
|||||||
[Dependency] private readonly SharedJobSystem _job = default!;
|
[Dependency] private readonly SharedJobSystem _job = default!;
|
||||||
[Dependency] private readonly SharedMindSystem _mind = default!;
|
[Dependency] private readonly SharedMindSystem _mind = default!;
|
||||||
[Dependency] private readonly TargetObjectiveSystem _target = default!;
|
[Dependency] private readonly TargetObjectiveSystem _target = default!;
|
||||||
|
[Dependency] private readonly GulagSystem _gulag = default!; // WD
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -60,7 +62,7 @@ public sealed class KillPersonConditionSystem : EntitySystem
|
|||||||
|
|
||||||
// no other humans to kill
|
// no other humans to kill
|
||||||
var allHumans = _mind.GetAliveHumansExcept(args.MindId);
|
var allHumans = _mind.GetAliveHumansExcept(args.MindId);
|
||||||
allHumans = allHumans.Where(x => !HasComp<GulagBoundComponent>(x)).ToList(); // WD
|
allHumans = allHumans.Where(x => !_gulag.IsMindGulagged(x)).ToList();
|
||||||
if (allHumans.Count == 0)
|
if (allHumans.Count == 0)
|
||||||
{
|
{
|
||||||
args.Cancelled = true;
|
args.Cancelled = true;
|
||||||
@@ -85,7 +87,7 @@ public sealed class KillPersonConditionSystem : EntitySystem
|
|||||||
|
|
||||||
// no other humans to kill
|
// no other humans to kill
|
||||||
var allHumans = _mind.GetAliveHumansExcept(args.MindId);
|
var allHumans = _mind.GetAliveHumansExcept(args.MindId);
|
||||||
allHumans = allHumans.Where(x => !HasComp<GulagBoundComponent>(x)).ToList(); // WD
|
allHumans = allHumans.Where(x => !_gulag.IsMindGulagged(x)).ToList();
|
||||||
if (allHumans.Count == 0)
|
if (allHumans.Count == 0)
|
||||||
{
|
{
|
||||||
args.Cancelled = true;
|
args.Cancelled = true;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using Content.Shared.Hands.EntitySystems;
|
|||||||
using Content.Shared.Interaction;
|
using Content.Shared.Interaction;
|
||||||
using Content.Shared.Inventory;
|
using Content.Shared.Inventory;
|
||||||
using Content.Shared.Materials;
|
using Content.Shared.Materials;
|
||||||
|
using Content.Shared.Mind;
|
||||||
using Content.Shared.Parallax.Biomes;
|
using Content.Shared.Parallax.Biomes;
|
||||||
using Content.Shared.Popups;
|
using Content.Shared.Popups;
|
||||||
using Content.Shared.Preferences;
|
using Content.Shared.Preferences;
|
||||||
@@ -121,7 +122,7 @@ public sealed partial class GulagSystem : SharedGulagSystem
|
|||||||
|
|
||||||
private void OnJoinedLobby(PlayerJoinedLobbyEvent ev)
|
private void OnJoinedLobby(PlayerJoinedLobbyEvent ev)
|
||||||
{
|
{
|
||||||
if(IsUserGulaged(ev.PlayerSession.UserId, out _))
|
if(IsUserGulagged(ev.PlayerSession.UserId, out _))
|
||||||
{
|
{
|
||||||
_chatManager.DispatchServerMessage(ev.PlayerSession, Loc.GetString("gulag-chat-join-message"));
|
_chatManager.DispatchServerMessage(ev.PlayerSession, Loc.GetString("gulag-chat-join-message"));
|
||||||
}
|
}
|
||||||
@@ -141,7 +142,7 @@ public sealed partial class GulagSystem : SharedGulagSystem
|
|||||||
|
|
||||||
var player = source.PlayerId;
|
var player = source.PlayerId;
|
||||||
|
|
||||||
if (!IsUserGulaged(player, out var ban))
|
if (!IsUserGulagged(player, out var ban))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -289,13 +290,21 @@ public sealed partial class GulagSystem : SharedGulagSystem
|
|||||||
_popupSystem.PopupEntity(Loc.GetString("gulag-ban-time-changed", ("Time", $"{time.TotalSeconds}")), uid, PopupType.Medium);
|
_popupSystem.PopupEntity(Loc.GetString("gulag-ban-time-changed", ("Time", $"{time.TotalSeconds}")), uid, PopupType.Medium);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsUserGulaged(NetUserId playerId, out HashSet<ServerBanDef> bans)
|
public bool IsUserGulagged(NetUserId playerId, out HashSet<ServerBanDef> bans)
|
||||||
{
|
{
|
||||||
bans = _banManager.GetServerBans(playerId);
|
bans = _banManager.GetServerBans(playerId);
|
||||||
|
|
||||||
return bans.Count != 0;
|
return bans.Count != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsMindGulagged(EntityUid mindId)
|
||||||
|
{
|
||||||
|
if (!TryComp(mindId, out MindComponent? mind) || mind.UserId == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return IsUserGulagged(mind.UserId.Value, out _);
|
||||||
|
}
|
||||||
|
|
||||||
private void SendToGulag(EntityUid playerEntity)
|
private void SendToGulag(EntityUid playerEntity)
|
||||||
{
|
{
|
||||||
if (_inventorySystem.TryGetContainerSlotEnumerator(playerEntity, out var enumerator))
|
if (_inventorySystem.TryGetContainerSlotEnumerator(playerEntity, out var enumerator))
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
|||||||
if (entity == default)
|
if (entity == default)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (_gulag.IsUserGulaged(actor.PlayerSession.UserId, out _))
|
if (_gulag.IsUserGulagged(actor.PlayerSession.UserId, out _))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (exclude?.Contains(actor.PlayerSession) is true)
|
if (exclude?.Contains(actor.PlayerSession) is true)
|
||||||
@@ -348,7 +348,7 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
|||||||
foreach (var player in candidates.Keys)
|
foreach (var player in candidates.Keys)
|
||||||
{
|
{
|
||||||
// Gulag
|
// Gulag
|
||||||
if (_gulag.IsUserGulaged(player.UserId, out _))
|
if (_gulag.IsUserGulagged(player.UserId, out _))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Role prevents antag.
|
// Role prevents antag.
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public sealed class ChemicalsSystem : EntitySystem
|
|||||||
if(_net.IsServer)
|
if(_net.IsServer)
|
||||||
{
|
{
|
||||||
_alertsSystem.ShowAlert(uid, AlertType.Chemicals,
|
_alertsSystem.ShowAlert(uid, AlertType.Chemicals,
|
||||||
(short) Math.Clamp(Math.Round(component.ChemicalsBalance / 10f), 0, 7));
|
(short) Math.Clamp(Math.Round(component.ChemicalsBalance / 10f), 0, 16));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,6 +172,9 @@
|
|||||||
- type: ExplosionResistance
|
- type: ExplosionResistance
|
||||||
damageCoefficient: 0.5
|
damageCoefficient: 0.5
|
||||||
- type: GroupExamine
|
- type: GroupExamine
|
||||||
|
- type: ClothingSpeedModifier
|
||||||
|
walkModifier: 0.85
|
||||||
|
sprintModifier: 0.85
|
||||||
- type: Unremoveable
|
- type: Unremoveable
|
||||||
deleteOnDrop: true
|
deleteOnDrop: true
|
||||||
- type: ClothingModifyChemicalRegen
|
- type: ClothingModifyChemicalRegen
|
||||||
|
|||||||
@@ -17,11 +17,11 @@
|
|||||||
id: BaseChangelingStealObjective
|
id: BaseChangelingStealObjective
|
||||||
components:
|
components:
|
||||||
- type: StealCondition
|
- type: StealCondition
|
||||||
verifyMapExistance: false
|
verifyMapExistence: false
|
||||||
- type: Objective
|
- type: Objective
|
||||||
difficulty: 2.75
|
difficulty: 2.75
|
||||||
- type: ObjectiveLimit
|
- type: ObjectiveLimit
|
||||||
limit: 1
|
limit: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
noSpawn: true
|
noSpawn: true
|
||||||
@@ -63,6 +63,22 @@
|
|||||||
- type: PickRandomChangeling
|
- type: PickRandomChangeling
|
||||||
- type: AbsorbChangelingCondition
|
- type: AbsorbChangelingCondition
|
||||||
|
|
||||||
|
# escape
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
noSpawn: true
|
||||||
|
parent: [BaseChangelingObjective, BaseLivingObjective]
|
||||||
|
id: EscapeShuttleObjectiveCh
|
||||||
|
name: Escape to centcom alive and unrestrained.
|
||||||
|
description: One of our undercover agents will debrief you when you arrive. Don't show up in cuffs.
|
||||||
|
components:
|
||||||
|
- type: Objective
|
||||||
|
difficulty: 1.3
|
||||||
|
icon:
|
||||||
|
sprite: Structures/Furniture/chairs.rsi
|
||||||
|
state: shuttle
|
||||||
|
- type: EscapeShuttleCondition
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
noSpawn: true
|
noSpawn: true
|
||||||
parent: BaseChangelingObjective
|
parent: BaseChangelingObjective
|
||||||
@@ -76,6 +92,11 @@
|
|||||||
title: objective-condition-escape-with-identity-title
|
title: objective-condition-escape-with-identity-title
|
||||||
- type: PickRandomIdentity
|
- type: PickRandomIdentity
|
||||||
- type: EscapeWithIdentityCondition
|
- type: EscapeWithIdentityCondition
|
||||||
|
- type: ObjectiveBlacklistRequirement
|
||||||
|
blacklist:
|
||||||
|
components:
|
||||||
|
- EscapeShuttleCondition
|
||||||
|
- DieCondition
|
||||||
|
|
||||||
# steal
|
# steal
|
||||||
|
|
||||||
@@ -225,3 +246,37 @@
|
|||||||
- type: StealCondition
|
- type: StealCondition
|
||||||
stealGroup: NukeDisk
|
stealGroup: NukeDisk
|
||||||
owner: objective-condition-steal-station
|
owner: objective-condition-steal-station
|
||||||
|
|
||||||
|
# kill
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
noSpawn: true
|
||||||
|
parent: [BaseChangelingObjective, BaseKillObjective]
|
||||||
|
id: KillRandomPersonObjectiveCh
|
||||||
|
description: Do it however you like, just make sure they don't make it to centcom.
|
||||||
|
components:
|
||||||
|
- type: Objective
|
||||||
|
difficulty: 1.75
|
||||||
|
unique: false
|
||||||
|
- type: TargetObjective
|
||||||
|
title: objective-condition-kill-person-title
|
||||||
|
- type: PickRandomPerson
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
noSpawn: true
|
||||||
|
parent: [BaseChangelingObjective, BaseKillObjective]
|
||||||
|
id: KillRandomHeadObjectiveCh
|
||||||
|
description: We need this head gone and you probably know why. Good luck, agent.
|
||||||
|
components:
|
||||||
|
- type: Objective
|
||||||
|
# technically its still possible for KillRandomPersonObjective to roll a head but this is guaranteed, so higher difficulty
|
||||||
|
difficulty: 3.0
|
||||||
|
# killing 1 head is enough
|
||||||
|
unique: true
|
||||||
|
- type: TargetObjective
|
||||||
|
title: objective-condition-kill-head-title
|
||||||
|
- type: PickRandomHead
|
||||||
|
- type: KillPersonCondition
|
||||||
|
# don't count missing evac as killing as heads are higher profile, so you really need to do the dirty work
|
||||||
|
# if ce flies a shittle to centcom you better find a way onto it
|
||||||
|
requireDead: true
|
||||||
|
|||||||
@@ -133,17 +133,18 @@
|
|||||||
weights:
|
weights:
|
||||||
ChangelingObjectiveGroupSteal: 1
|
ChangelingObjectiveGroupSteal: 1
|
||||||
ChangelingObjectiveGroupKill: 1
|
ChangelingObjectiveGroupKill: 1
|
||||||
|
ChangelingObjectiveGroupEscape: 1
|
||||||
|
|
||||||
- type: weightedRandom
|
- type: weightedRandom
|
||||||
id: ChangelingObjectiveGroupSteal
|
id: ChangelingObjectiveGroupSteal
|
||||||
weights:
|
weights:
|
||||||
CaptainIDStealObjectiveCh: 0.5
|
CaptainIDStealObjectiveCh: 1
|
||||||
CMOHyposprayStealObjectiveCh: 0.5
|
CMOHyposprayStealObjectiveCh: 1
|
||||||
RDHardsuitStealObjectiveCh: 0.5
|
RDHardsuitStealObjectiveCh: 1
|
||||||
NukeDiskStealObjectiveCh: 0.5
|
NukeDiskStealObjectiveCh: 1
|
||||||
MagbootsStealObjectiveCh: 0.5
|
MagbootsStealObjectiveCh: 1
|
||||||
CorgiMeatStealObjectiveCh: 0.5
|
CorgiMeatStealObjectiveCh: 1
|
||||||
ClipboardStealObjectiveCh: 0.5
|
ClipboardStealObjectiveCh: 1
|
||||||
CaptainGunStealObjectiveCh: 0.5
|
CaptainGunStealObjectiveCh: 0.5
|
||||||
CaptainJetpackStealObjectiveCh: 0.5
|
CaptainJetpackStealObjectiveCh: 0.5
|
||||||
HandTeleporterStealObjectiveCh: 0.5
|
HandTeleporterStealObjectiveCh: 0.5
|
||||||
@@ -154,5 +155,12 @@
|
|||||||
weights:
|
weights:
|
||||||
AbsorbDnaObjective: 1
|
AbsorbDnaObjective: 1
|
||||||
AbsorbMoreDnaObjective: 0.75
|
AbsorbMoreDnaObjective: 0.75
|
||||||
AbsorbChangelingObjective: 0.25
|
#AbsorbChangelingObjective: 0.25
|
||||||
EscapeWithIdentityObjective: 0.75
|
KillRandomPersonObjectiveCh: 1
|
||||||
|
KillRandomHeadObjectiveCh: 0.25
|
||||||
|
|
||||||
|
- type: weightedRandom
|
||||||
|
id: ChangelingObjectiveGroupEscape
|
||||||
|
weights:
|
||||||
|
EscapeShuttleObjectiveCh: 1
|
||||||
|
EscapeWithIdentityObjective: 0.5
|
||||||
|
|||||||
Reference in New Issue
Block a user