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:
committed by
GitHub
parent
2a6705818b
commit
7311ce671f
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user