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