* - 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:
Aviu00
2024-04-22 00:07:27 +09:00
committed by GitHub
parent bf0a124b05
commit 6272da2bb3
20 changed files with 115 additions and 47 deletions

View 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}");
}
}

View File

@@ -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));

View File

@@ -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;
}
}
}

View File

@@ -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
}
}

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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.

View File

@@ -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;
}
}
}

View File

@@ -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);

View File

@@ -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);
}
}
}

View File

@@ -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"));
}
}

View File

@@ -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;
}
}
}

View File

@@ -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)

View File

@@ -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")]

View File

@@ -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);
}
}
}

View File

@@ -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
{
}
}
}
}

View File

@@ -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)

View File

@@ -47,6 +47,7 @@
icon: White/Actions/changeling.rsi/reviving_stasis.png
event: !type:RegenerateActionEvent
checkCanInteract: false
checkConsciousness: false
useDelay: 1
- type: entity

View File

@@ -2782,6 +2782,7 @@
- type: Temperature
heatDamageThreshold: 423
coldDamageThreshold: 0
slowdown: false
- type: PressureImmunity
- type: InteractionPopup
successChance: 0.7

View File

@@ -5,7 +5,6 @@
parent: Handcuffs
components:
- type: Handcuff
breakoutTime: 15
color: black
breakOnRemove: true
- type: Sprite