Fixes (#289)
* - fix: Ling fixes. * - fix: Fix ghasp identity. * - fix: Low temp slowdown fix. * - fix: Crossbow fix. * - fix: Fix gamerules. * - fix: Fix shadow shackles. * - fix: Cleanup refund. * - fix: Can't pry runic door. * - fix: Fix crash. * - fix: Fix mood. * - fix: Fix dictionary.
This commit is contained in:
28
Content.Client/Miracle/Changeling/ChemicalsAlertSystem.cs
Normal file
28
Content.Client/Miracle/Changeling/ChemicalsAlertSystem.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using Content.Client.Alerts;
|
||||
using Content.Shared.Alert;
|
||||
using Content.Shared.Changeling;
|
||||
using Content.Shared.Revenant;
|
||||
|
||||
namespace Content.Client.Miracle.Changeling;
|
||||
|
||||
public sealed class ChemicalsAlertSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<ChangelingComponent, UpdateAlertSpriteEvent>(OnUpdateAlert);
|
||||
}
|
||||
|
||||
private void OnUpdateAlert(Entity<ChangelingComponent> ent, ref UpdateAlertSpriteEvent args)
|
||||
{
|
||||
if (args.Alert.AlertType != AlertType.Chemicals)
|
||||
return;
|
||||
|
||||
var sprite = args.SpriteViewEnt.Comp;
|
||||
var chemicals = Math.Clamp(ent.Comp.ChemicalsBalance, 0, 999);
|
||||
sprite.LayerSetState(RevenantVisualLayers.Digit1, $"{(chemicals / 100) % 10}");
|
||||
sprite.LayerSetState(RevenantVisualLayers.Digit2, $"{(chemicals / 10) % 10}");
|
||||
sprite.LayerSetState(RevenantVisualLayers.Digit3, $"{chemicals % 10}");
|
||||
}
|
||||
}
|
||||
@@ -119,10 +119,7 @@ public sealed class RespiratorSystem : EntitySystem
|
||||
if (_gameTiming.CurTime >= respirator.LastGaspPopupTime + respirator.GaspPopupCooldown)
|
||||
{
|
||||
respirator.LastGaspPopupTime = _gameTiming.CurTime;
|
||||
if (TryComp<MetaDataComponent>(uid, out var metaDataComponent))
|
||||
{
|
||||
_popupSystem.PopupEntity($"{metaDataComponent.EntityName} задыхается!", uid);
|
||||
}
|
||||
_popupSystem.PopupEntity($"{Name(Identity.Entity(uid, EntityManager))} задыхается!", uid);
|
||||
}
|
||||
|
||||
TakeSuffocationDamage((uid, respirator));
|
||||
|
||||
@@ -53,6 +53,13 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
||||
SubscribeLocalEvent<ChangelingRoleComponent, GetBriefingEvent>(OnGetBriefing);
|
||||
}
|
||||
|
||||
protected override void Added(EntityUid uid, ChangelingRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args)
|
||||
{
|
||||
base.Added(uid, component, gameRule, args);
|
||||
|
||||
gameRule.MinPlayers = PlayersPerChangeling;
|
||||
}
|
||||
|
||||
private void OnGetBriefing(Entity<ChangelingRoleComponent> ent, ref GetBriefingEvent args)
|
||||
{
|
||||
args.Append(Loc.GetString("changeling-role-briefing-short"));
|
||||
@@ -182,7 +189,7 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
||||
|
||||
MakeChangeling(entity, changelingRule);
|
||||
}
|
||||
|
||||
|
||||
public bool MakeChangeling(EntityUid changeling, ChangelingRuleComponent rule, bool giveObjectives = true)
|
||||
{
|
||||
if (!_mindSystem.TryGetMind(changeling, out var mindId, out var mind))
|
||||
@@ -196,7 +203,7 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
||||
return false;
|
||||
}
|
||||
|
||||
var briefing = Loc.GetString("changeling-role-briefing-short");
|
||||
var briefing = Loc.GetString("changeling-role-greeting");
|
||||
_antagSelection.SendBriefing(changeling, briefing, null, rule.GreetSoundNotification);
|
||||
|
||||
rule.ChangelingMinds.Add(mindId);
|
||||
@@ -206,11 +213,6 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
||||
PrototypeId = rule.ChangelingPrototypeId
|
||||
}, mind);
|
||||
|
||||
_roleSystem.MindAddRole(mindId, new RoleBriefingComponent
|
||||
{
|
||||
Briefing = briefing
|
||||
}, mind, true);
|
||||
|
||||
// Change the faction
|
||||
_npcFaction.RemoveFaction(changeling, "NanoTrasen", false);
|
||||
_npcFaction.AddFaction(changeling, "Syndicate");
|
||||
@@ -220,7 +222,7 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
||||
readyChangeling.HiveName = _nameGenerator.GetName();
|
||||
Dirty(changeling, readyChangeling);
|
||||
|
||||
RaiseLocalEvent(mindId, new MoodEffectEvent("TraitorFocused")); // WD edit
|
||||
RaiseLocalEvent(changeling, new MoodEffectEvent("TraitorFocused"));
|
||||
|
||||
if (!giveObjectives)
|
||||
return true;
|
||||
@@ -240,4 +242,4 @@ public sealed class ChangelingRuleSystem : GameRuleSystem<ChangelingRuleComponen
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -737,7 +737,6 @@ public sealed partial class ChangelingSystem
|
||||
if (!TryComp<StoreComponent>(implant, out var store) || store.Preset != "StorePresetChangeling")
|
||||
continue;
|
||||
|
||||
store.Refunds = true;
|
||||
store.RefundAllowed = true;
|
||||
}
|
||||
}
|
||||
@@ -972,7 +971,7 @@ public sealed partial class ChangelingSystem
|
||||
ClonePerson(polymorphEntity.Value, transformData.AppearanceComponent, polyAppearance);
|
||||
TransferDna(polymorphEntity.Value, transformData.Dna);
|
||||
|
||||
_humanoidAppearance.SetTTSVoice(polymorphEntity.Value, transformData.AppearanceComponent.Voice,
|
||||
_humanoidAppearance.SetTTSVoice(polymorphEntity.Value, transformData.AppearanceComponent.Voice,
|
||||
humanoid: polyAppearance);
|
||||
|
||||
if (!TryComp<MetaDataComponent>(polymorphEntity.Value, out var meta))
|
||||
@@ -1210,4 +1209,4 @@ public sealed partial class ChangelingSystem
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,6 @@ public sealed partial class ChangelingSystem
|
||||
if (!TryComp(args.Store, out StoreComponent? storeComponent))
|
||||
return;
|
||||
|
||||
storeComponent.Refunds = false;
|
||||
_storeSystem.DisableRefund(args.Store, storeComponent);
|
||||
}
|
||||
|
||||
|
||||
@@ -161,11 +161,11 @@ public sealed class TraitorRuleSystem : GameRuleSystem<TraitorRuleComponent>
|
||||
Log.Error($"Player {mind.CharacterName} is already a traitor.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// WD START
|
||||
var richAspect = _gameTicker.GetActiveGameRules().Where(HasComp<TraitorRichAspectComponent>).Any();
|
||||
// WD END
|
||||
|
||||
|
||||
var briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords)));
|
||||
Note[]? code = null;
|
||||
if (giveUplink)
|
||||
@@ -179,7 +179,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem<TraitorRuleComponent>
|
||||
{
|
||||
startingBalance += 10;
|
||||
}
|
||||
|
||||
|
||||
// creadth: we need to create uplink for the antag.
|
||||
// PDA should be in place already
|
||||
var pda = _uplink.FindUplinkTarget(traitor);
|
||||
@@ -214,7 +214,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem<TraitorRuleComponent>
|
||||
_npcFaction.RemoveFaction(traitor, component.NanoTrasenFaction, false);
|
||||
_npcFaction.AddFaction(traitor, component.SyndicateFaction);
|
||||
|
||||
RaiseLocalEvent(mindId, new MoodEffectEvent("TraitorFocused")); // WD edit
|
||||
RaiseLocalEvent(traitor, new MoodEffectEvent("TraitorFocused")); // WD edit
|
||||
|
||||
// Give traitors their objectives
|
||||
if (giveObjectives)
|
||||
|
||||
@@ -91,10 +91,6 @@ public sealed partial class StoreComponent : Component
|
||||
[DataField]
|
||||
public EntityUid? StartingMap;
|
||||
|
||||
// Miracle
|
||||
[DataField]
|
||||
public bool Refunds;
|
||||
|
||||
#region audio
|
||||
/// <summary>
|
||||
/// The sound played to the buyer when a purchase is succesfully made.
|
||||
|
||||
@@ -173,7 +173,7 @@ public sealed partial class StoreSystem
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsOnStartingMap(uid, component) || !component.Refunds) // Miracle edit
|
||||
if (!IsOnStartingMap(uid, component))
|
||||
component.RefundAllowed = false;
|
||||
|
||||
//subtract the cash
|
||||
@@ -337,7 +337,7 @@ public sealed partial class StoreSystem
|
||||
if (args.Session.AttachedEntity is not { Valid: true } buyer)
|
||||
return;
|
||||
|
||||
if (!IsOnStartingMap(uid, component) || !component.Refunds) // Miracle edit
|
||||
if (!IsOnStartingMap(uid, component))
|
||||
{
|
||||
component.RefundAllowed = false;
|
||||
UpdateUserInterface(buyer, uid, component);
|
||||
@@ -403,4 +403,4 @@ public sealed partial class StoreSystem
|
||||
|
||||
component.RefundAllowed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.Server.Temperature.Components;
|
||||
using Content.Server.Temperature.Systems;
|
||||
using Content.Shared.Changeling;
|
||||
using Content.Shared.Damage.Components;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Content.Shared.Movement.Systems;
|
||||
|
||||
@@ -21,7 +22,7 @@ public sealed class LowTemperatureSlowdownSystem : EntitySystem
|
||||
private void OnMoveSpeedRefresh(EntityUid uid, TemperatureComponent component,
|
||||
RefreshMovementSpeedModifiersEvent args)
|
||||
{
|
||||
var modifier = HasComp<VoidAdaptationComponent>(uid) || !component.Slowdown
|
||||
var modifier = HasComp<GodmodeComponent>(uid) || HasComp<VoidAdaptationComponent>(uid) || !component.Slowdown
|
||||
? 1f
|
||||
: GetSpeedModifier(component.CurrentTemperature);
|
||||
args.ModifySpeed(modifier, modifier);
|
||||
|
||||
@@ -6,6 +6,7 @@ using Content.Server.Bible.Components;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.GameTicking;
|
||||
using Content.Server.GameTicking.Rules;
|
||||
using Content.Server.GameTicking.Rules.Components;
|
||||
using Content.Server.NPC.Systems;
|
||||
using Content.Server.Roles;
|
||||
using Content.Server.Roles.Jobs;
|
||||
@@ -27,6 +28,7 @@ using Robust.Shared.Random;
|
||||
using Content.Shared._White;
|
||||
using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared._White.Cult.Systems;
|
||||
using Content.Shared._White.Mood;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.NPC.Systems;
|
||||
using Robust.Server.Player;
|
||||
@@ -74,6 +76,13 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
||||
SubscribeLocalEvent<CultistRoleComponent, GetBriefingEvent>(OnGetBriefing);
|
||||
}
|
||||
|
||||
protected override void Added(EntityUid uid, CultRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args)
|
||||
{
|
||||
base.Added(uid, component, gameRule, args);
|
||||
|
||||
gameRule.MinPlayers = _cfg.GetCVar(WhiteCVars.CultMinPlayers);
|
||||
}
|
||||
|
||||
private void OnGetBriefing(Entity<CultistRoleComponent> ent, ref GetBriefingEvent args)
|
||||
{
|
||||
args.Append(Loc.GetString("cult-role-briefing-short"));
|
||||
@@ -149,9 +158,11 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
||||
|
||||
cult.CurrentCultists.Add(component);
|
||||
|
||||
if (TryComp<ActorComponent>(uid, out var actor))
|
||||
var name = Name(uid);
|
||||
|
||||
if (TryComp<ActorComponent>(uid, out var actor) && !cult.CultistsCache.ContainsKey(name))
|
||||
{
|
||||
cult.CultistsCache.Add(MetaData(uid).EntityName, actor.PlayerSession.Name);
|
||||
cult.CultistsCache.Add(name, actor.PlayerSession.Name);
|
||||
}
|
||||
|
||||
UpdateCultistsAppearance(cult);
|
||||
@@ -187,10 +198,8 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
||||
|
||||
private void DoCultistsStart(CultRuleComponent rule)
|
||||
{
|
||||
var eligiblePlayers =
|
||||
_antagSelection.GetEligiblePlayers(_playerManager.Sessions, rule.CultistRolePrototype);
|
||||
|
||||
eligiblePlayers.RemoveAll(HasComp<BibleUserComponent>);
|
||||
var eligiblePlayers = _antagSelection.GetEligiblePlayers(_playerManager.Sessions, rule.CultistRolePrototype,
|
||||
customExcludeCondition: HasComp<BibleUserComponent>);
|
||||
|
||||
if (eligiblePlayers.Count == 0)
|
||||
{
|
||||
@@ -357,7 +366,7 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
||||
|
||||
MakeCultist(entity, cultistRule);
|
||||
}
|
||||
|
||||
|
||||
public bool MakeCultist(EntityUid cultist, CultRuleComponent rule)
|
||||
{
|
||||
if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind))
|
||||
@@ -385,6 +394,8 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
||||
_factionSystem.RemoveFaction(cultist, "NanoTrasen", false);
|
||||
_factionSystem.AddFaction(cultist, "Cultist");
|
||||
|
||||
RaiseLocalEvent(cultist, new MoodEffectEvent("CultFocused"));
|
||||
|
||||
if (_inventorySystem.TryGetSlotEntity(cultist, "back", out var backPack))
|
||||
{
|
||||
foreach (var itemPrototype in rule.StartingItems)
|
||||
@@ -420,4 +431,4 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
||||
EnsureComp<CultistComponent>(transferTo);
|
||||
RemComp<CultistComponent>(transferFrom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ using Content.Shared.Chemistry.Reagent;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared._White.Mood;
|
||||
using Content.Shared.Mind;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Server.Containers;
|
||||
@@ -86,5 +87,7 @@ public sealed partial class DeconvertCultist : ReagentEffect
|
||||
|
||||
if (roleSystem.MindHasRole<CultistRoleComponent>(mindId))
|
||||
roleSystem.MindRemoveRole<CultistRoleComponent>(mindId);
|
||||
|
||||
entityManager.EventBus.RaiseLocalEvent(uid, new MoodRemoveEffectEvent("CultFocused"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared._White.Cult.Systems;
|
||||
using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Cuffs;
|
||||
using Content.Shared.Cuffs.Components;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Maps;
|
||||
@@ -79,8 +80,14 @@ public partial class CultSystem
|
||||
return;
|
||||
|
||||
var cuffs = Spawn("ShadowShackles", Transform(ent).Coordinates);
|
||||
if (!_cuffable.TryAddNewCuffs(args.Target.Value, args.User, cuffs, cuffable))
|
||||
QueueDel(cuffs);
|
||||
var handcuffComponent = EnsureComp<HandcuffComponent>(cuffs);
|
||||
if (_cuffable.TryAddNewCuffs(args.Target.Value, args.User, cuffs, cuffable, handcuffComponent))
|
||||
{
|
||||
SharedCuffableSystem.SetUsed(handcuffComponent, true);
|
||||
return;
|
||||
}
|
||||
|
||||
QueueDel(cuffs);
|
||||
}
|
||||
|
||||
private void OnActionRemoved(Entity<CultistComponent> ent, ref ActionGettingRemovedEvent args)
|
||||
@@ -493,4 +500,4 @@ public partial class CultSystem
|
||||
_handsSystem.TryPickupAnyHand(args.Performer, dagger);
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ using Content.Shared._White.Cult.Systems;
|
||||
using Content.Shared.Cuffs.Components;
|
||||
using Content.Shared.Doors.Components;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Prying.Components;
|
||||
using Content.Shared.Weapons.Melee.Components;
|
||||
using Content.Shared.Weapons.Melee.Events;
|
||||
using Robust.Shared.Audio;
|
||||
@@ -38,6 +39,12 @@ public sealed class RunicDoorSystem : EntitySystem
|
||||
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorClosedEvent>(OnBeforeDoorClosed);
|
||||
// SubscribeLocalEvent<RunicDoorComponent, AttackedEvent>(OnGetAttacked);
|
||||
SubscribeLocalEvent<RunicDoorComponent, ConcealEvent>(OnConceal);
|
||||
SubscribeLocalEvent<RunicDoorComponent, BeforePryEvent>(OnBeforePry);
|
||||
}
|
||||
|
||||
private void OnBeforePry(Entity<RunicDoorComponent> ent, ref BeforePryEvent args)
|
||||
{
|
||||
args.Cancelled = true;
|
||||
}
|
||||
|
||||
private void OnConceal(Entity<RunicDoorComponent> ent, ref ConcealEvent args)
|
||||
@@ -112,7 +119,7 @@ public sealed class RunicDoorSystem : EntitySystem
|
||||
return true;
|
||||
}
|
||||
|
||||
_doorSystem.Deny(airlock);
|
||||
// _doorSystem.Deny(airlock);
|
||||
|
||||
if (!HasComp<HumanoidAppearanceComponent>(user) || _holyWeapon.IsHoldingHolyWeapon(user) ||
|
||||
TryComp(airlock, out ConcealableComponent? concealable) && concealable.Concealed)
|
||||
|
||||
@@ -5,7 +5,7 @@ using Robust.Shared.Prototypes;
|
||||
namespace Content.Shared.Changeling;
|
||||
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class ChangelingComponent : Component
|
||||
{
|
||||
[DataField("chemRegenRate")]
|
||||
@@ -14,7 +14,7 @@ public sealed partial class ChangelingComponent : Component
|
||||
[DataField("chemicalCap")]
|
||||
public int ChemicalCapacity = 75;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("chemicalsBalance")]
|
||||
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public int ChemicalsBalance = 20;
|
||||
|
||||
[ViewVariables(VVAccess.ReadWrite), DataField("pointsBalance")]
|
||||
|
||||
@@ -75,6 +75,9 @@ public sealed class ChemicalsSystem : EntitySystem
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
if (_net.IsClient)
|
||||
return;
|
||||
|
||||
var query = EntityQueryEnumerator<ChangelingComponent>();
|
||||
|
||||
while (query.MoveNext(out var uid, out var component))
|
||||
@@ -96,8 +99,7 @@ public sealed class ChemicalsSystem : EntitySystem
|
||||
{
|
||||
if(_net.IsServer)
|
||||
{
|
||||
_alertsSystem.ShowAlert(uid, AlertType.Chemicals,
|
||||
(short) Math.Clamp(Math.Round(component.ChemicalsBalance / 10f), 0, 16));
|
||||
_alertsSystem.ShowAlert(uid, AlertType.Chemicals);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -776,6 +776,13 @@ namespace Content.Shared.Cuffs
|
||||
cuff.Removing = false;
|
||||
}
|
||||
|
||||
// WD START
|
||||
public static void SetUsed(HandcuffComponent cuffs, bool used)
|
||||
{
|
||||
cuffs.Used = used;
|
||||
}
|
||||
// WD END
|
||||
|
||||
#region ActionBlocker
|
||||
|
||||
private void CheckAct(EntityUid uid, CuffableComponent component, CancellableEntityEventArgs args)
|
||||
@@ -815,4 +822,4 @@ namespace Content.Shared.Cuffs
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ using Content.Shared.Interaction;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Content.Shared.Throwing;
|
||||
using Content.Shared._White.Crossbow;
|
||||
using Content.Shared.Item;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Network;
|
||||
@@ -47,6 +48,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
|
||||
SubscribeLocalEvent<EmbeddableProjectileComponent, LandEvent>(OnLand); // WD
|
||||
SubscribeLocalEvent<EmbeddableProjectileComponent, ComponentRemove>(OnRemove); // WD
|
||||
SubscribeLocalEvent<EmbeddableProjectileComponent, EntityTerminatingEvent>(OnEntityTerminating); // WD
|
||||
SubscribeLocalEvent<EmbeddableProjectileComponent, GettingPickedUpAttemptEvent>(OnTryPickUp); // WD
|
||||
}
|
||||
|
||||
private void OnEmbedActivate(EntityUid uid, EmbeddableProjectileComponent component, ActivateInWorldEvent args)
|
||||
@@ -235,6 +237,12 @@ public abstract partial class SharedProjectileSystem : EntitySystem
|
||||
FreePenetrated(component);
|
||||
}
|
||||
|
||||
private void OnTryPickUp(Entity<EmbeddableProjectileComponent> ent, ref GettingPickedUpAttemptEvent args)
|
||||
{
|
||||
if (ent.Comp.PenetratedUid != null)
|
||||
args.Cancel();
|
||||
}
|
||||
|
||||
private void FreePenetrated(EmbeddableProjectileComponent component)
|
||||
{
|
||||
if (component.PenetratedUid == null)
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
icon: White/Actions/changeling.rsi/reviving_stasis.png
|
||||
event: !type:RegenerateActionEvent
|
||||
checkCanInteract: false
|
||||
checkConsciousness: false
|
||||
useDelay: 1
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -2782,6 +2782,7 @@
|
||||
- type: Temperature
|
||||
heatDamageThreshold: 423
|
||||
coldDamageThreshold: 0
|
||||
slowdown: false
|
||||
- type: PressureImmunity
|
||||
- type: InteractionPopup
|
||||
successChance: 0.7
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
parent: Handcuffs
|
||||
components:
|
||||
- type: Handcuff
|
||||
breakoutTime: 15
|
||||
color: black
|
||||
breakOnRemove: true
|
||||
- type: Sprite
|
||||
|
||||
Reference in New Issue
Block a user