--- /dev/null
+using System.Linq;
+using System.Threading.Tasks;
+using Content.Server.Ghost.Roles.Components;
+using Content.Server.NPC.Systems;
+using Content.Shared.EntityTable;
+using Content.Shared.Physics;
+using Content.Shared.Procedural;
+using Content.Shared.Procedural.DungeonLayers;
+using Robust.Shared.Collections;
+
+namespace Content.Server.Procedural.DungeonJob;
+
+public sealed partial class DungeonJob
+{
+ private async Task PostGen(
+ EntityTableDunGen gen,
+ Dungeon dungeon,
+ Random random)
+ {
+ var availableRooms = new ValueList<DungeonRoom>();
+ availableRooms.AddRange(dungeon.Rooms);
+ var availableTiles = new ValueList<Vector2i>(dungeon.AllTiles);
+
+ var count = random.Next(gen.MinCount, gen.MaxCount + 1);
+ var npcs = _entManager.System<NPCSystem>();
+
+ for (var i = 0; i < count; i++)
+ {
+ while (availableTiles.Count > 0)
+ {
+ var tile = availableTiles.RemoveSwap(random.Next(availableTiles.Count));
+
+ if (!_anchorable.TileFree(_grid,
+ tile,
+ (int) CollisionGroup.MachineLayer,
+ (int) CollisionGroup.MachineLayer))
+ {
+ continue;
+ }
+
+ var entities = _entManager.System<EntityTableSystem>().GetSpawns(gen.Table, random).ToList();
+ foreach (var ent in entities)
+ {
+ var uid = _entManager.SpawnAtPosition(ent, _maps.GridTileToLocal(_gridUid, _grid, tile));
+ _entManager.RemoveComponent<GhostRoleComponent>(uid);
+ _entManager.RemoveComponent<GhostTakeoverAvailableComponent>(uid);
+ npcs.SleepNPC(uid);
+ }
+
+ break;
+ }
+
+ await SuspendDungeon();
+
+ if (!ValidateResume())
+ return;
+ }
+ }
+}
tableId: SalvageScrapSpawnerValuable
prob: 0.75
+- type: entityTable
+ id: SalvageTreasureSpawnerCommon
+ table: !type:GroupSelector
+ children:
+ # 80% chance of some treasure
+ - !type:GroupSelector
+ weight: 80
+ children:
+ - !type:NestedSelector
+ tableId: SalvageTreasureCommon
+ weight: 60
+ - !type:NestedSelector
+ tableId: SalvageTreasureUncommon
+ weight: 30
+ - !type:NestedSelector
+ tableId: SalvageTreasureRare
+ weight: 9
+ - !type:NestedSelector
+ tableId: SalvageTreasureLegendary
+ weight: 1
+ # 10% chance of low-level equipment
+ - !type:GroupSelector
+ weight: 10
+ children:
+ - !type:NestedSelector
+ tableId: SalvageEquipmentCommon
+ weight: 60
+ - !type:NestedSelector
+ tableId: SalvageEquipmentUncommon
+ weight: 40
+ # 5% chance of moderate scrap
+ - !type:GroupSelector
+ weight: 5
+ children:
+ - !type:NestedSelector
+ tableId: SalvageScrapLowValue
+ weight: 60
+ - !type:NestedSelector
+ tableId: SalvageScrapHighValue
+ weight: 30
+ - !type:NestedSelector
+ tableId: SalvageScrapLarge
+ weight: 10
+ # 5% chance of maintenance fluff
+ - !type:NestedSelector
+ tableId: MaintFluffTable
+ weight: 5
+
- type: entity
parent: MarkerBase
id: SalvageSpawnerTreasure
state: diamond
- type: EntityTableSpawner
offset: 0.4
- table: !type:GroupSelector
+ table: !type:NestedSelector
+ tableId: SalvageTreasureSpawnerCommon
prob: 0.75
+
+- type: entityTable
+ id: SalvageTreasureSpawnerValuable
+ table: !type:GroupSelector
+ children:
+ # 80% chance of some treasure
+ - !type:GroupSelector
+ weight: 80
children:
- # 80% chance of some treasure
- - !type:GroupSelector
- weight: 80
- children:
- - !type:NestedSelector
- tableId: SalvageTreasureCommon
- weight: 60
- - !type:NestedSelector
- tableId: SalvageTreasureUncommon
- weight: 30
- - !type:NestedSelector
- tableId: SalvageTreasureRare
- weight: 9
- - !type:NestedSelector
- tableId: SalvageTreasureLegendary
- weight: 1
- # 10% chance of low-level equipment
- - !type:GroupSelector
- weight: 10
- children:
- - !type:NestedSelector
- tableId: SalvageEquipmentCommon
- weight: 60
- - !type:NestedSelector
- tableId: SalvageEquipmentUncommon
- weight: 40
- # 5% chance of moderate scrap
- - !type:GroupSelector
- weight: 5
- children:
- - !type:NestedSelector
- tableId: SalvageScrapLowValue
- weight: 60
- - !type:NestedSelector
- tableId: SalvageScrapHighValue
- weight: 30
- - !type:NestedSelector
- tableId: SalvageScrapLarge
- weight: 10
- # 5% chance of maintenance fluff
- !type:NestedSelector
- tableId: MaintFluffTable
+ tableId: SalvageTreasureCommon
+ weight: 45
+ - !type:NestedSelector
+ tableId: SalvageTreasureUncommon
+ weight: 35
+ - !type:NestedSelector
+ tableId: SalvageTreasureRare
+ weight: 15
+ - !type:NestedSelector
+ tableId: SalvageTreasureLegendary
weight: 5
+ # 10% chance of low-level equipment
+ - !type:GroupSelector
+ weight: 10
+ children:
+ - !type:NestedSelector
+ tableId: SalvageEquipmentCommon
+ weight: 50
+ - !type:NestedSelector
+ tableId: SalvageEquipmentUncommon
+ weight: 40
+ - !type:NestedSelector
+ tableId: SalvageEquipmentUncommon
+ weight: 10
+ # 5% chance of moderate scrap
+ - !type:GroupSelector
+ weight: 5
+ children:
+ - !type:NestedSelector
+ tableId: SalvageScrapLowValue
+ weight: 30
+ - !type:NestedSelector
+ tableId: SalvageScrapHighValue
+ weight: 45
+ - !type:NestedSelector
+ tableId: SalvageScrapLarge
+ weight: 25
+ # 5% chance of maintenance fluff
+ - !type:NestedSelector
+ tableId: MaintFluffTable
+ weight: 5
+ rolls: !type:RangeNumberSelector
+ range: 1, 2
- type: entity
parent: MarkerBase
state: diamond
- type: EntityTableSpawner
offset: 0.4
- table: !type:GroupSelector
+ table: !type:NestedSelector
+ tableId: SalvageTreasureSpawnerValuable
prob: 0.75
+
+- type: entityTable
+ id: SalvageEquipmentSpawnerCommon
+ table: !type:GroupSelector
+ children:
+ # 80% chance of equipment item
+ - !type:GroupSelector
+ weight: 80
children:
- # 80% chance of some treasure
- - !type:GroupSelector
- weight: 80
- children:
- - !type:NestedSelector
- tableId: SalvageTreasureCommon
- weight: 45
- - !type:NestedSelector
- tableId: SalvageTreasureUncommon
- weight: 35
- - !type:NestedSelector
- tableId: SalvageTreasureRare
- weight: 15
- - !type:NestedSelector
- tableId: SalvageTreasureLegendary
- weight: 5
- # 10% chance of low-level equipment
- - !type:GroupSelector
- weight: 10
- children:
- - !type:NestedSelector
- tableId: SalvageEquipmentCommon
- weight: 50
- - !type:NestedSelector
- tableId: SalvageEquipmentUncommon
- weight: 40
- - !type:NestedSelector
- tableId: SalvageEquipmentUncommon
- weight: 10
- # 5% chance of moderate scrap
- - !type:GroupSelector
+ - !type:NestedSelector
+ tableId: SalvageEquipmentCommon
+ weight: 60
+ - !type:NestedSelector
+ tableId: SalvageEquipmentUncommon
+ weight: 30
+ - !type:NestedSelector
+ tableId: SalvageEquipmentRare
+ weight: 9
+ - !type:NestedSelector
+ tableId: SalvageEquipmentLegendary
+ weight: 1
+ # 15% chance of decent-ish treasure
+ - !type:GroupSelector
+ weight: 15
+ children:
+ - !type:NestedSelector
+ tableId: SalvageTreasureCommon
+ weight: 75
+ - !type:NestedSelector
+ tableId: SalvageTreasureUncommon
+ weight: 20
+ - !type:NestedSelector
+ tableId: SalvageTreasureRare
weight: 5
- children:
- - !type:NestedSelector
- tableId: SalvageScrapLowValue
- weight: 30
- - !type:NestedSelector
- tableId: SalvageScrapHighValue
- weight: 45
- - !type:NestedSelector
- tableId: SalvageScrapLarge
- weight: 25
- # 5% chance of maintenance fluff
+ # 5% chance of decent maintenance loot
+ - !type:GroupSelector
+ weight: 5
+ children:
+ - !type:NestedSelector
+ tableId: MaintToolsTable
- !type:NestedSelector
tableId: MaintFluffTable
- weight: 5
- rolls: !type:RangeNumberSelector
- range: 1, 2
- type: entity
parent: MarkerBase
state: walkietalkie
- type: EntityTableSpawner
offset: 0.4
- table: !type:GroupSelector
+ table: !type:NestedSelector
+ tableId: SalvageEquipmentSpawnerCommon
prob: 0.75
+
+- type: entityTable
+ id: SalvageEquipmentSpawnerValuable
+ table: !type:GroupSelector
+ children:
+ # 80% chance of equipment item
+ - !type:GroupSelector
+ weight: 80
children:
- # 80% chance of equipment item
- - !type:GroupSelector
- weight: 80
- children:
- - !type:NestedSelector
- tableId: SalvageEquipmentCommon
- weight: 60
- - !type:NestedSelector
- tableId: SalvageEquipmentUncommon
- weight: 30
- - !type:NestedSelector
- tableId: SalvageEquipmentRare
- weight: 9
- - !type:NestedSelector
- tableId: SalvageEquipmentLegendary
- weight: 1
- # 15% chance of decent-ish treasure
- - !type:GroupSelector
+ - !type:NestedSelector
+ tableId: SalvageEquipmentCommon
+ weight: 45
+ - !type:NestedSelector
+ tableId: SalvageEquipmentUncommon
+ weight: 35
+ - !type:NestedSelector
+ tableId: SalvageEquipmentRare
weight: 15
- children:
- - !type:NestedSelector
- tableId: SalvageTreasureCommon
- weight: 75
- - !type:NestedSelector
- tableId: SalvageTreasureUncommon
- weight: 20
- - !type:NestedSelector
- tableId: SalvageTreasureRare
- weight: 5
- # 5% chance of decent maintenance loot
- - !type:GroupSelector
+ - !type:NestedSelector
+ tableId: SalvageEquipmentLegendary
weight: 5
- children:
- - !type:NestedSelector
- tableId: MaintToolsTable
- - !type:NestedSelector
- tableId: MaintFluffTable
+ # 14% chance of decent-ish treasure
+ - !type:GroupSelector
+ weight: 14
+ children:
+ - !type:NestedSelector
+ tableId: SalvageTreasureCommon
+ weight: 60
+ - !type:NestedSelector
+ tableId: SalvageTreasureUncommon
+ weight: 30
+ - !type:NestedSelector
+ tableId: SalvageTreasureRare
+ weight: 10
+ # 5% chance of decent maintenance loot
+ - !type:GroupSelector
+ weight: 5
+ children:
+ - !type:NestedSelector
+ tableId: MaintToolsTable
+ - !type:NestedSelector
+ tableId: MaintFluffTable
+ # 1% chance of syndie maintenance loot
+ - !type:GroupSelector
+ weight: 1
+ children:
+ - !type:NestedSelector
+ tableId: SyndieMaintLoot
- type: entity
parent: MarkerBase
state: walkietalkie
- type: EntityTableSpawner
offset: 0.4
- table: !type:GroupSelector
+ table: !type:NestedSelector
+ tableId: SalvageEquipmentSpawnerValuable
prob: 0.75
- children:
- # 80% chance of equipment item
- - !type:GroupSelector
- weight: 80
- children:
- - !type:NestedSelector
- tableId: SalvageEquipmentCommon
- weight: 45
- - !type:NestedSelector
- tableId: SalvageEquipmentUncommon
- weight: 35
- - !type:NestedSelector
- tableId: SalvageEquipmentRare
- weight: 15
- - !type:NestedSelector
- tableId: SalvageEquipmentLegendary
- weight: 5
- # 14% chance of decent-ish treasure
- - !type:GroupSelector
- weight: 14
- children:
- - !type:NestedSelector
- tableId: SalvageTreasureCommon
- weight: 60
- - !type:NestedSelector
- tableId: SalvageTreasureUncommon
- weight: 30
- - !type:NestedSelector
- tableId: SalvageTreasureRare
- weight: 10
- # 5% chance of decent maintenance loot
- - !type:GroupSelector
- weight: 5
- children:
- - !type:NestedSelector
- tableId: MaintToolsTable
- - !type:NestedSelector
- tableId: MaintFluffTable
- # 1% chance of syndie maintenance loot
- - !type:GroupSelector
- weight: 1
- children:
- - !type:NestedSelector
- tableId: SyndieMaintLoot
- type: entity
name: Salvage Canister Spawner