Cult fix cloning & more (#355)

* - fix: Fix cult cloning.

* - tweak: Some tweaks.

* - fix: Cult door not rcd deconstructible.
This commit is contained in:
Aviu00
2024-06-14 14:01:26 +00:00
committed by GitHub
parent 894af847cd
commit f18cde3d6c
8 changed files with 37 additions and 25 deletions

View File

@@ -3,15 +3,12 @@ using Content.Server._Miracle.GulagSystem;
using Content.Server.Actions;
using Content.Server.Antag;
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.Objectives.Components;
using Content.Server.Roles;
using Content.Server.Roles.Jobs;
using Content.Server.RoundEnd;
using Content.Server.Shuttles.Components;
using Content.Server.StationEvents.Components;
using Content.Server.Storage.EntitySystems;
using Content.Shared.Body.Systems;
@@ -29,6 +26,7 @@ using Content.Shared._White;
using Content.Shared._White.Cult.Components;
using Content.Shared._White.Cult.Systems;
using Content.Shared._White.Mood;
using Content.Shared.Cloning;
using Content.Shared.Mind;
using Content.Shared.NPC.Systems;
using Robust.Server.Player;
@@ -72,10 +70,16 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
SubscribeLocalEvent<CultistComponent, ComponentInit>(OnCultistComponentInit);
SubscribeLocalEvent<CultistComponent, ComponentRemove>(OnCultistComponentRemoved);
SubscribeLocalEvent<CultistComponent, MobStateChangedEvent>(OnCultistsStateChanged);
SubscribeLocalEvent<CultistComponent, CloningEvent>(OnClone);
SubscribeLocalEvent<CultistRoleComponent, GetBriefingEvent>(OnGetBriefing);
}
private void OnClone(Entity<CultistComponent> ent, ref CloningEvent args)
{
RemoveObjectiveAndRole(ent);
}
protected override void Added(EntityUid uid, CultRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args)
{
base.Added(uid, component, gameRule, args);
@@ -178,6 +182,21 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
}
}
public void RemoveObjectiveAndRole(EntityUid uid)
{
if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind))
return;
var objectives = mind.Objectives.FindAll(HasComp<PickCultTargetComponent>);
foreach (var obj in objectives)
{
_mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj));
}
if (_roleSystem.MindHasRole<CultistRoleComponent>(mindId))
_roleSystem.MindRemoveRole<CultistRoleComponent>(mindId);
}
private void OnCultistComponentRemoved(EntityUid uid, CultistComponent component, ComponentRemove args)
{
var query = QueryActiveRules();

View File

@@ -1,4 +1,5 @@
using System.Threading;
using Content.Server._White.Cult.GameRule;
using Content.Server.Objectives.Components;
using Content.Server.Popups;
using Content.Server.Roles;
@@ -8,6 +9,7 @@ using Content.Shared.IdentityManagement;
using Content.Shared.Inventory;
using Content.Shared._White.Cult.Components;
using Content.Shared._White.Mood;
using Content.Shared.Jittering;
using Content.Shared.Mind;
using JetBrains.Annotations;
using Robust.Server.Containers;
@@ -40,6 +42,8 @@ public sealed partial class DeconvertCultist : ReagentEffect
args.EntityManager.System<StunSystem>()
.TryParalyze(uid, TimeSpan.FromSeconds(component.HolyConvertTime + 5f), true);
args.EntityManager.System<SharedJitteringSystem>()
.DoJitter(uid, TimeSpan.FromSeconds(component.HolyConvertTime + 5f), true);
var target = Identity.Name(uid, args.EntityManager);
args.EntityManager.System<PopupSystem>()
.PopupEntity(Loc.GetString("holy-water-started-converting", ("target", target)), uid);
@@ -73,20 +77,8 @@ public sealed partial class DeconvertCultist : ReagentEffect
entityManager.RemoveComponent<CultistComponent>(uid);
entityManager.RemoveComponent<PentagramComponent>(uid);
var mindSystem = entityManager.System<SharedMindSystem>();
var roleSystem = entityManager.System<RoleSystem>();
if (!mindSystem.TryGetMind(uid, out var mindId, out var mind))
return;
var objectives = mind.Objectives.FindAll(entityManager.HasComponent<PickCultTargetComponent>);
foreach (var obj in objectives)
{
mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj));
}
if (roleSystem.MindHasRole<CultistRoleComponent>(mindId))
roleSystem.MindRemoveRole<CultistRoleComponent>(mindId);
var cultRuleSystem = entityManager.System<CultRuleSystem>();
cultRuleSystem.RemoveObjectiveAndRole(uid);
entityManager.EventBus.RaiseLocalEvent(uid, new MoodRemoveEffectEvent("CultFocused"));
}

View File

@@ -1,8 +1,8 @@
- type: vendingMachineInventory
id: SalvageEquipmentInventory
startingInventory:
WeaponProtoKineticAccelerator: 4
WeaponCrusher: 4
WeaponProtoKineticAccelerator: 2
WeaponCrusher: 2
WeaponCrusherDagger: 4
WeaponGrapplingGun: 3
HandheldGPSBasic: 10

View File

@@ -36,7 +36,6 @@
parent: Handcuffs
components:
- type: Handcuff
breakoutTime: 3
cuffedRSI: Objects/Misc/cablecuffs.rsi
bodyIconState: body-overlay
color: forestgreen
@@ -79,7 +78,6 @@
size: Tiny
storedRotation: 0
- type: Handcuff
breakoutTime: 3
cuffedRSI: Objects/Misc/cablecuffs.rsi # cablecuffs will look fine
bodyIconState: body-overlay
breakOnRemove: true

View File

@@ -47,7 +47,7 @@
damage:
types:
Blunt: 15
Structural: 40
Structural: 10
soundHit:
path: "/Audio/Weapons/smash.ogg"
@@ -89,4 +89,4 @@
damage:
types:
Blunt: 20
Structural: 60
Structural: 20

View File

@@ -60,7 +60,7 @@
- type: SolutionContainerManager
solutions:
melee:
maxVol: 2
maxVol: 5
- type: MeleeChemicalInjector
solution: melee
- type: RefillableSolution

View File

@@ -46,6 +46,7 @@
- type: Clothing
slots:
- back
- suitStorage
- type: Wieldable
- type: IncreaseDamageOnWield
damage:

View File

@@ -44,6 +44,8 @@
- type: Construction
graph: AirlockGlassCult
node: airlock
- type: RCDDeconstructable
deconstructable: false
- type: PlacementReplacement
key: walls
- type: Appearance