fix dragon spawn location and round end summary (#31890)

* spawn dragon rule at station edge

* 2

* stuff

* fix round end summary not showing

* no invalid euid
This commit is contained in:
qwerltaz
2024-09-09 21:22:41 +02:00
committed by GitHub
parent 0f9f37d7f0
commit 7c99b5c10b
5 changed files with 61 additions and 11 deletions

View File

@@ -1,7 +0,0 @@
namespace Content.Server.Dragon;
[RegisterComponent]
public sealed partial class DragonRuleComponent : Component
{
}

View File

@@ -0,0 +1,4 @@
namespace Content.Server.GameTicking.Rules.Components;
[RegisterComponent]
public sealed partial class DragonRuleComponent : Component;

View File

@@ -0,0 +1,52 @@
using Content.Server.Antag;
using Content.Server.GameTicking.Rules.Components;
using Content.Server.Station.Components;
using Content.Server.Station.Systems;
using Content.Shared.Localizations;
using Robust.Server.GameObjects;
namespace Content.Server.GameTicking.Rules;
public sealed class DragonRuleSystem : GameRuleSystem<DragonRuleComponent>
{
[Dependency] private readonly TransformSystem _transform = default!;
[Dependency] private readonly AntagSelectionSystem _antag = default!;
[Dependency] private readonly StationSystem _station = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DragonRuleComponent, AfterAntagEntitySelectedEvent>(AfterAntagEntitySelected);
}
private void AfterAntagEntitySelected(Entity<DragonRuleComponent> ent, ref AfterAntagEntitySelectedEvent args)
{
_antag.SendBriefing(args.EntityUid, MakeBriefing(args.EntityUid), null, null);
}
private string MakeBriefing(EntityUid dragon)
{
var direction = string.Empty;
var dragonXform = Transform(dragon);
var station = _station.GetStationInMap(dragonXform.MapID);
EntityUid? stationGrid = null;
if (TryComp<StationDataComponent>(station, out var stationData))
stationGrid = _station.GetLargestGrid(stationData);
if (stationGrid is not null)
{
var stationPosition = _transform.GetWorldPosition((EntityUid)stationGrid);
var dragonPosition = _transform.GetWorldPosition(dragon);
var vectorToStation = stationPosition - dragonPosition;
direction = ContentLocalizationManager.FormatDirection(vectorToStation.GetDir());
}
var briefing = Loc.GetString("dragon-role-briefing", ("direction", direction));
return briefing;
}
}

View File

@@ -2,4 +2,4 @@ dragon-round-end-agent-name = dragon
objective-issuer-dragon = [color=#7567b6]Space Dragon[/color]
dragon-role-briefing = Summon 3 carp rifts and take over this quadrant!
dragon-role-briefing = Summon 3 carp rifts and take over this quadrant! The station is located {$direction}.

View File

@@ -157,9 +157,12 @@
earliestStart: 40
reoccurrenceDelay: 20
minimumPlayers: 20
- type: AntagRandomSpawn
duration: null
- type: SpaceSpawnRule
spawnDistance: 0
- type: AntagSpawner
prototype: MobDragon
- type: DragonRule
- type: AntagObjectives
objectives:
- CarpRiftsObjective
@@ -174,8 +177,6 @@
mindComponents:
- type: DragonRole
prototype: Dragon
- type: RoleBriefing
briefing: dragon-role-briefing
- type: entity
parent: BaseGameRule