Skip to content

Commit 6ad37e3

Browse files
authored
Merge pull request #291 from FireNameFN/VoxRaiders
vox-raiders part 2
2 parents f6b9ef1 + 99a9188 commit 6ad37e3

File tree

98 files changed

+812
-53
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+812
-53
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Content.Server._CorvaxNext.VoxRaiders.Components;
2+
3+
[RegisterComponent]
4+
public sealed partial class BatteryToggleComponent : Component
5+
{
6+
[DataField]
7+
public float MaxCharge = 60;
8+
9+
[DataField]
10+
public float Charge = 60;
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Content.Server._CorvaxNext.VoxRaiders.Components;
2+
3+
[RegisterComponent]
4+
public sealed partial class ControlPinpointerComponent : Component
5+
{
6+
public List<EntityUid> Entities = [];
7+
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Content.Server._CorvaxNext.VoxRaiders.Components;
22

33
[RegisterComponent]
4-
public sealed partial class ExtractionShuttleComponent : Component
4+
public sealed partial class ExtractionMapComponent : Component
55
{
66
public HashSet<EntityUid> Owners = [];
77
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Content.Server._CorvaxNext.VoxRaiders.Components;
22

33
[RegisterComponent]
4-
public sealed partial class VoxRaidersShuttleComponent : Component
4+
public sealed partial class VoxRaidersMapComponent : Component
55
{
66
public EntityUid Rule;
77
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
namespace Content.Server._CorvaxNext.VoxRaiders.Components;
2+
3+
[RegisterComponent]
4+
public sealed partial class VoxRaidersPinpointerComponent : Component;

Content.Server/_CorvaxNext/VoxRaiders/Components/VoxRaidersRuleComponent.cs

-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,5 @@ public sealed partial class VoxRaidersRuleComponent : Component
2020

2121
public Dictionary<string, List<(EntityUid Objective, EntityUid Mind)>> Objectives = [];
2222

23-
public EntityUid Map;
24-
2523
public bool Success;
2624
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Content.Server._CorvaxNext.VoxRaiders.Components;
2+
using Content.Shared.Item.ItemToggle;
3+
using Content.Shared.Item.ItemToggle.Components;
4+
5+
namespace Content.Server._CorvaxNext.VoxRaiders.EntitySystems;
6+
7+
public sealed class BatteryToggleSystem : EntitySystem
8+
{
9+
[Dependency] private readonly ItemToggleSystem _toggle = default!;
10+
11+
public override void Update(float frameTime)
12+
{
13+
var query = AllEntityQuery<BatteryToggleComponent, ItemToggleComponent>();
14+
while (query.MoveNext(out var entity, out var battery, out var toggle))
15+
{
16+
var activated = _toggle.IsActivated((entity, toggle));
17+
18+
battery.Charge = Math.Clamp(battery.Charge + (activated ? -frameTime : frameTime), 0, battery.MaxCharge);
19+
20+
if (battery.Charge <= 0)
21+
_toggle.TryDeactivate((entity, toggle), predicted: false);
22+
}
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Content.Server._CorvaxNext.VoxRaiders.Components;
2+
using Content.Shared.Pinpointer;
3+
using Content.Shared.Verbs;
4+
5+
namespace Content.Server._CorvaxNext.VoxRaiders.EntitySystems;
6+
7+
public sealed class ControlPinpointerSystem : EntitySystem
8+
{
9+
[Dependency] private readonly SharedPinpointerSystem _pin = default!;
10+
11+
public override void Initialize()
12+
{
13+
SubscribeLocalEvent<ControlPinpointerComponent, GetVerbsEvent<Verb>>(OnGetVerbs);
14+
}
15+
16+
private void OnGetVerbs(Entity<ControlPinpointerComponent> entity, ref GetVerbsEvent<Verb> e)
17+
{
18+
if (!TryComp<PinpointerComponent>(entity, out var pin))
19+
return;
20+
21+
var index = 0;
22+
23+
foreach (var ent in entity.Comp.Entities)
24+
e.Verbs.Add(new()
25+
{
26+
Text = MetaData(ent).EntityName,
27+
Disabled = pin.Target == ent,
28+
Category = VerbCategory.PinpointerTarget,
29+
Priority = index--,
30+
Act = () => _pin.SetTarget(entity, ent, pin)
31+
});
32+
}
33+
}

Content.Server/_CorvaxNext/VoxRaiders/EntitySystems/ExtractConditionSystem.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ private void OnObjectiveGetProgress(Entity<ExtractConditionComponent> entity, re
4141
if (target.StealGroup != entity.Comp.StealGroup)
4242
continue;
4343

44-
if (!TryComp<ExtractionShuttleComponent>(transform.GridUid, out var shuttle))
44+
if (!TryComp<ExtractionMapComponent>(transform.MapUid, out var map))
4545
continue;
4646

47-
if (!shuttle.Owners.Contains(e.MindId))
47+
if (!map.Owners.Contains(e.MindId))
4848
continue;
4949

5050
e.Progress = 1;

Content.Server/_CorvaxNext/VoxRaiders/EntitySystems/VoxRaidersRuleSystem.cs

+73-16
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44
using Content.Server.GameTicking;
55
using Content.Server.GameTicking.Rules;
66
using Content.Server.Objectives;
7+
using Content.Server.Objectives.Components.Targets;
8+
using Content.Server.Shuttles.Components;
79
using Content.Server.Shuttles.Events;
10+
using Content.Server.Shuttles.Systems;
11+
using Content.Shared.Containers.ItemSlots;
812
using Content.Shared.GameTicking.Components;
913
using Content.Shared.Mind;
1014
using Content.Shared.Players;
1115
using Content.Shared.Random.Helpers;
12-
using Robust.Shared.Map.Components;
16+
using Content.Shared.Shuttles.Components;
1317
using Robust.Shared.Prototypes;
1418
using Robust.Shared.Random;
1519
using Robust.Shared.Utility;
@@ -23,6 +27,8 @@ public sealed class VoxRaidersRuleSystem : GameRuleSystem<VoxRaidersRuleComponen
2327
[Dependency] private readonly SharedMindSystem _mind = default!;
2428
[Dependency] private readonly ObjectivesSystem _objectives = default!;
2529
[Dependency] private readonly SharedMapSystem _map = default!;
30+
[Dependency] private readonly ShuttleSystem _shuttle = default!;
31+
[Dependency] private readonly ItemSlotsSystem _slots = default!;
2632

2733
public override void Initialize()
2834
{
@@ -31,7 +37,9 @@ public override void Initialize()
3137
SubscribeLocalEvent<VoxRaidersRuleComponent, AfterAntagEntitySelectedEvent>(OnAfterAntagEntitySelected);
3238
SubscribeLocalEvent<VoxRaidersRuleComponent, RuleLoadedGridsEvent>(OnRuleLoadedGrids);
3339

34-
SubscribeLocalEvent<VoxRaidersShuttleComponent, FTLCompletedEvent>(OnFTLCompleted);
40+
SubscribeLocalEvent<VoxRaidersPinpointerComponent, MapInitEvent>(OnMapInit);
41+
42+
SubscribeLocalEvent<FTLCompletedEvent>(OnFTLCompleted);
3543
}
3644

3745
protected override void Started(EntityUid uid, VoxRaidersRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
@@ -82,9 +90,9 @@ private void OnAfterAntagEntitySelected(Entity<VoxRaidersRuleComponent> entity,
8290

8391
entity.Comp.Raiders.Add(e.EntityUid);
8492

85-
var query = AllEntityQuery<VoxRaidersShuttleComponent, ExtractionShuttleComponent>();
86-
while (query.MoveNext(out var shuttle, out var extraction))
87-
if (shuttle.Rule == entity.Owner)
93+
var query = AllEntityQuery<VoxRaidersMapComponent, ExtractionMapComponent>();
94+
while (query.MoveNext(out var map, out var extraction))
95+
if (map.Rule == entity.Owner)
8896
extraction.Owners.Add(mind.Value);
8997

9098
foreach (var objective in entity.Comp.ObjectivePrototypes)
@@ -105,26 +113,72 @@ private void OnAfterAntagEntitySelected(Entity<VoxRaidersRuleComponent> entity,
105113

106114
private void OnRuleLoadedGrids(Entity<VoxRaidersRuleComponent> entity, ref RuleLoadedGridsEvent e)
107115
{
108-
entity.Comp.Map = _map.GetMap(e.Map);
116+
var map = _map.GetMap(e.Map);
117+
118+
var voxRaidersMap = EnsureComp<VoxRaidersMapComponent>(map);
119+
120+
voxRaidersMap.Rule = entity;
121+
122+
EnsureComp<ExtractionMapComponent>(map);
109123

110-
var query = AllEntityQuery<VoxRaidersShuttleComponent>();
111-
while (query.MoveNext(out var ent, out var shuttle))
124+
_shuttle.TryAddFTLDestination(e.Map, true, out _);
125+
126+
var query = AllEntityQuery<ShuttleConsoleComponent, ItemSlotsComponent, TransformComponent>();
127+
while (query.MoveNext(out var ent, out _, out var slots, out var transform))
112128
{
113-
if (Transform(ent).MapID != e.Map)
129+
if (transform.MapID != e.Map)
114130
continue;
115131

116-
EnsureComp<ExtractionShuttleComponent>(ent);
132+
var disk = Spawn("CoordinatesDisk");
133+
134+
var destination = EnsureComp<ShuttleDestinationCoordinatesComponent>(disk);
135+
136+
destination.Destination = map;
137+
138+
Dirty(disk, destination);
117139

118-
shuttle.Rule = entity;
140+
_slots.TryInsert(ent, SharedShuttleConsoleComponent.DiskSlotName, disk, null, slots);
119141
}
120142
}
121143

122-
private void OnFTLCompleted(Entity<VoxRaidersShuttleComponent> entity, ref FTLCompletedEvent e)
144+
private void OnMapInit(Entity<VoxRaidersPinpointerComponent> entity, ref MapInitEvent e)
123145
{
124-
if (!TryComp<VoxRaidersRuleComponent>(entity.Comp.Rule, out var rule))
146+
if (!TryComp<VoxRaidersMapComponent>(Transform(entity).MapUid, out var map))
125147
return;
126148

127-
if (e.MapUid != rule.Map)
149+
if (!TryComp<VoxRaidersRuleComponent>(map.Rule, out var rule))
150+
return;
151+
152+
if (!TryComp<ControlPinpointerComponent>(entity, out var pin))
153+
return;
154+
155+
foreach (var raider in rule.Raiders)
156+
pin.Entities.Add(raider);
157+
158+
foreach (var objectives in rule.Objectives.Values)
159+
{
160+
if (!TryComp<ExtractConditionComponent>(objectives[0].Objective, out var condition))
161+
continue;
162+
163+
var query = AllEntityQuery<StealTargetComponent>();
164+
while (query.MoveNext(out var ent, out var target))
165+
{
166+
if (target.StealGroup != condition.StealGroup)
167+
continue;
168+
169+
pin.Entities.Add(ent);
170+
171+
break;
172+
}
173+
}
174+
}
175+
176+
private void OnFTLCompleted(ref FTLCompletedEvent e)
177+
{
178+
if (!TryComp<VoxRaidersMapComponent>(e.MapUid, out var map))
179+
return;
180+
181+
if (!TryComp<VoxRaidersRuleComponent>(map.Rule, out var rule))
128182
return;
129183

130184
foreach (var objectives in rule.Objectives.Values)
@@ -135,10 +189,13 @@ private void OnFTLCompleted(Entity<VoxRaidersShuttleComponent> entity, ref FTLCo
135189

136190
foreach (var raider in rule.Raiders)
137191
{
138-
if (!TryComp<ExtractionShuttleComponent>(Transform(raider).GridUid, out var shuttle))
192+
if (!TryComp<ExtractionMapComponent>(Transform(raider).MapUid, out var extraction))
193+
return;
194+
195+
if (!_mind.TryGetMind(raider, out var mind, out _))
139196
return;
140197

141-
if (!shuttle.Owners.Contains(raider))
198+
if (!extraction.Owners.Contains(mind))
142199
return;
143200
}
144201

Content.Shared/Verbs/VerbCategory.cs

+2
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,7 @@ public VerbCategory(string text, string? icon, bool iconsOnly = false)
8787
public static readonly VerbCategory PowerLevel = new("verb-categories-power-level", null);
8888

8989
public static readonly VerbCategory TurretControlMode = new("verb-categories-turret-control-mode", null); // Corvax-Next-TurretControl
90+
91+
public static readonly VerbCategory PinpointerTarget = new("verb-categories-pinpointer-target", null); // Corvax-Next-VoxRaiders
9092
}
9193
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
chat-radio-vox-raiders = Рейдерский
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
verb-categories-turret-control-mode = Задать цель
2+
3+
verb-categories-pinpointer-target = Задать цель
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ent-ActionToggleStealthHardsuit = Стелс скафандр
2+
.desc = Переключить ваш стелс скафандр. Следите за тем, чтобы он не разрядился.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ent-ClothingHeadsetAltVoxRaiders = полноразмерная рейдерская гарнитура
2+
.desc = { ent-ClothingHeadsetAlt.desc }
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,11 @@
1-
ent-ClothingHeadHelmetHardsuitVoxRaider = рейдерский шлем
1+
ent-ClothingHeadHelmetHardsuitVoxRaidersCombat = боевой рейдерский шлем
2+
.desc = Странная голубая одёжка.
3+
4+
ent-ClothingHeadHelmetHardsuitVoxRaidersEngineer = инженерный рейдерский шлем
5+
.desc = Странная оранжевая одёжка.
6+
7+
ent-ClothingHeadHelmetHardsuitVoxRaidersMedical = медицинский рейдерский шлем
8+
.desc = Странная зелёная одёжка.
9+
10+
ent-ClothingHeadHelmetHardsuitVoxRaidersStealth = стелс рейдерский шлем
211
.desc = Странная серая одёжка.
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
ent-ClothingMaskGasVoxRaider = рейдерская маска
1+
ent-ClothingMaskGasVoxRaiders = рейдерская маска
22
.desc = Удобная чёрная маска... для клювов воксов.
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,11 @@
1-
ent-ClothingOuterHardsuitVoxRaider = рейдерский скафандр
1+
ent-ClothingOuterHardsuitVoxRaidersCombat = боевой рейдерский скафандр
2+
.desc = Странная голубая одёжка.
3+
4+
ent-ClothingOuterHardsuitVoxRaidersEngineer = инженерный рейдерский скафандр
5+
.desc = Странная оранжевая одёжка.
6+
7+
ent-ClothingOuterHardsuitVoxRaidersMedical = медицинский рейдерский скафандр
8+
.desc = Странная зелёная одёжка.
9+
10+
ent-ClothingOuterHardsuitVoxRaidersStealth = стелс рейдерский скафандр
211
.desc = Странная серая одёжка.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ent-EncryptionKeyVoxRaiders = рейдерский ключ шифрования
2+
.desc = Ключ шифрования для рейдерский миссий.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ent-VoxRaidersPinpointer = рейдерский пинпоинтер
2+
.desc = { ent-PinpointerBase.desc }

Resources/Maps/_CorvaxNext/Nonstations/vox.yml

-1
Original file line numberDiff line numberDiff line change
@@ -2146,7 +2146,6 @@ entities:
21462146
- 0
21472147
- 0
21482148
chunkSize: 4
2149-
- type: VoxRaidersShuttle
21502149
- proto: ActionToggleInternals
21512150
entities:
21522151
- uid: 856
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
- type: entity
2+
id: ActionToggleStealthHardsuit
3+
name: Stealth hardsuit
4+
description: Toggles your stealth hardsuit.
5+
components:
6+
- type: InstantAction
7+
useDelay: 20
8+
priority: -9
9+
event: !type:ToggleActionEvent
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
- type: entity
2+
parent: ClothingHeadsetAlt
3+
id: ClothingHeadsetAltVoxRaiders
4+
name: raider headset
5+
components:
6+
- type: EncryptionKeyHolder
7+
keySlots: 7
8+
- type: ContainerFill
9+
containers:
10+
key_slots:
11+
- EncryptionKeyVoxRaiders
12+
- EncryptionKeyCommon
13+
- type: Sprite
14+
sprite: _CorvaxNext/Clothing/Ears/Headsets/vox_raiders.rsi
15+
- type: Clothing
16+
sprite: _CorvaxNext/Clothing/Ears/Headsets/vox_raiders.rsi

0 commit comments

Comments
 (0)