Store ninja objectives in conditions 2 (#20894)

* move spider charge target from role

* shorter field names

* remove ninja role comment

* remove unused systems in SpaceNinjaSystem

* GenericAntagObjectivesAddedEvent

* check if warp point is on same map

* remove unnecessary import

* add missing loc when spider charge has no target

* a

* remove spider charge target requirement comp

* inline SpiderChargeTitle

* allow planting charge without objective

* remove map check

* fix role check when planting

* obj.Target

* Fix merge

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Vyacheslav Kovalevsky
2024-01-29 07:06:32 +03:00
committed by GitHub
parent 2a6705818b
commit 7311ce671f
10 changed files with 67 additions and 83 deletions

View File

@@ -1,7 +1,10 @@
using Content.Server.Roles;
using Content.Server.Objectives.Components;
using Content.Server.Warps;
using Content.Shared.Objectives.Components;
using Content.Shared.Mind;
using Content.Shared.Ninja.Components;
using Robust.Shared.Random;
using Content.Server.Roles;
namespace Content.Server.Objectives.Systems;
@@ -13,11 +16,14 @@ public sealed class NinjaConditionsSystem : EntitySystem
{
[Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly NumberObjectiveSystem _number = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly IRobustRandom _random = default!;
public override void Initialize()
{
SubscribeLocalEvent<DoorjackConditionComponent, ObjectiveGetProgressEvent>(OnDoorjackGetProgress);
SubscribeLocalEvent<SpiderChargeConditionComponent, RequirementCheckEvent>(OnSpiderChargeRequirementCheck);
SubscribeLocalEvent<SpiderChargeConditionComponent, ObjectiveAfterAssignEvent>(OnSpiderChargeAfterAssign);
SubscribeLocalEvent<SpiderChargeConditionComponent, ObjectiveGetProgressEvent>(OnSpiderChargeGetProgress);
@@ -43,28 +49,50 @@ public sealed class NinjaConditionsSystem : EntitySystem
}
// spider charge
private void OnSpiderChargeRequirementCheck(EntityUid uid, SpiderChargeConditionComponent comp, ref RequirementCheckEvent args)
{
if (args.Cancelled || !HasComp<NinjaRoleComponent>(args.MindId))
{
return;
}
// choose spider charge detonation point
var warps = new List<EntityUid>();
var query = EntityQueryEnumerator<BombingTargetComponent, WarpPointComponent>();
while (query.MoveNext(out var warpUid, out _, out var warp))
{
if (warp.Location != null)
{
warps.Add(warpUid);
}
}
if (warps.Count <= 0)
{
args.Cancelled = true;
return;
}
comp.Target = _random.Pick(warps);
}
private void OnSpiderChargeAfterAssign(EntityUid uid, SpiderChargeConditionComponent comp, ref ObjectiveAfterAssignEvent args)
{
_metaData.SetEntityName(uid, SpiderChargeTitle(args.MindId), args.Meta);
string title;
if (comp.Target == null || !TryComp<WarpPointComponent>(comp.Target, out var warp) || warp.Location == null)
{
// this should never really happen but eh
title = Loc.GetString("objective-condition-spider-charge-title-no-target");
}
else
{
title = Loc.GetString("objective-condition-spider-charge-title", ("location", warp.Location));
}
_metaData.SetEntityName(uid, title, args.Meta);
}
private void OnSpiderChargeGetProgress(EntityUid uid, SpiderChargeConditionComponent comp, ref ObjectiveGetProgressEvent args)
{
args.Progress = comp.SpiderChargeDetonated ? 1f : 0f;
}
private string SpiderChargeTitle(EntityUid mindId)
{
if (!TryComp<NinjaRoleComponent>(mindId, out var role) ||
role.SpiderChargeTarget == null ||
!TryComp<WarpPointComponent>(role.SpiderChargeTarget, out var warp))
{
// this should never really happen but eh
return Loc.GetString("objective-condition-spider-charge-title-no-target");
}
return Loc.GetString("objective-condition-spider-charge-title", ("location", warp.Location ?? Name(role.SpiderChargeTarget.Value)));
args.Progress = comp.Detonated ? 1f : 0f;
}
// steal research